理想的には、特定の関数が実行されたときに目的のビューが実行するアニメーションを決定できるコードを書きたいと思います (nb、疑似コード)。
- (void)animateView:(UIView *)view withAnimations:(NSArray *)arrayOfAnimationBlocks
上記の (つまり、目的の) 関数は、一連のアニメーションを順番に実行し、前のアニメーションが完全に実行されるまで各アニメーションを実行しません。実行時にアニメーションを追加および削除することもできarrayOfAnimationBlocks
ます。
このようなことをするために、私は以下を使用しようとしています:
[UIView animateWithDuration:duration animations:animationBlock completion:completionBlock];
関数が呼び出されると、すべてのパラメーター ( duration
、animationBlock
、 )が渡されます。completionBlock
しかし...
self
animationBlock内からアクセスできないようですね?私のアニメーションブロックには以下が含まれています:
void (^animationBlock)(void) = ^
{
NSLog(@"[^animationBlock]");
[self.viewToAnimate setBounds:CGRectMake(self.viewToAnimate.bounds.origin.x, self.viewToAnimate.bounds.origin.y, self.viewToAnimate.bounds.size.width*2, self.viewToAnimate.bounds.size.height*2)];
};
私の完了ブロックには以下が含まれます:
void (^completionBlock)(void) = ^
{
NSLog(@"[^completionBlock]");
[UIView animateWithDuration:duration animations:^{
[self.viewToAnimate setBounds:CGRectMake(self.viewToAnimate.bounds.origin.x, self.viewToAnimate.bounds.origin.y, self.viewToAnimate.bounds.size.width/2, self.viewToAnimate.bounds.size.height/2)];
} completion:^(BOOL finished){
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Animation Complete" message:@"The previous animations should be fully completed." delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStyleDefault;
[alert show];
}];
};
そしてもちろん私は持っています:
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0) NSLog(@"Cancel pressed.");
else
{
NSLog(@"buttonIndex = %i", buttonIndex);
}
}
animationBlock
とXcode の両方でcompletionBlock
、次の赤いエラーが発生します。
(!) Use of undeclared identifier 'self'