サブビューを作成し、画面上でアニメーション化する簡単なプログラムがあります。
このプログラムの一環として、サブビューがタップされたときの機能を追加したいと思います。次のメソッドを使用してサブビューを作成し、UITapGestureRecognizer を追加してから、サブビューをアニメーション化しています。
int randomName = arc4random() % ([pieceNames count] - 1);
int animationDuration = arc4random() % 5 + 5 ;
NSString *randomPiece = [pieceNames objectAtIndex:randomName];
float yStart = arc4random() % 650;
float yEnd = arc4random() % 650;
UIView *piece = [[PieceView alloc]initWithFrame:CGRectMake(100.0, yStart, 75.0, 75.0)];
[piece setValue:randomPiece forKey:@"name"];
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc]initWithTarget:self
action:@selector(handleTouch:)];
[piece addGestureRecognizer:recognizer];
[[self view] addSubview:piece];
[UIView animateWithDuration:animationDuration
delay:0.0
options:UIViewAnimationOptionAllowUserInteraction
animations:^(void){
piece.center = CGPointMake(950.0, yEnd);
} completion:^(BOOL done){
[piece removeFromSuperview];
}];
タップを処理するコードは次のとおりです。
PieceView *pv = (PieceView *) recognizer.view;
NSLog(@"%@ was tapped", pv.name);
何が起こるかというと、PieceView に触れたときにプログラムが応答しません。ただし、アニメーション ブロックを削除すると、プログラムはタップに応答します。
アニメーション化されているとき、UITapGestureRecognizer が PieceView に応答しないのはなぜですか?