XCode 4.5.1 を使用しています。
<UIGestureRecognizerDelegate>
.h ファイルと .m ファイルの先頭に追加しました
@interface FirstViewController ()
@property (nonatomic, strong) UIImageView *img1;
@end
次に、プログラムで次のようviewDidLoad
に作成しますUIImageView
self.img1 = [[UIImageView alloc] initWithFrame:CGRectMake(50, -30, 44, 44)];
[self.img1 setImage:[UIImage imageNamed:@"image1.png"]];
[self.img1 setAlpha:0.8];
[self.img1 setHidden:NO];
[self.img1 setUserInteractionEnabled:YES];
[self.img1 setTag:901];
その後
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(guessTapObject:)];
tap.numberOfTapsRequired = 1;
tap.numberOfTouchesRequired = 1;
tap.delegate = self;
[self.img1 addGestureRecognizer:tap];
[self.view addSubview:self.img1];
[self.view bringSubviewToFront:self.img1];
そして最後に
- (void)guessTapObject:(UITapGestureRecognizer *) gesture
{
// guessing the image
UIImageView *tapImageView = (UIImageView*) gesture.view;
NSLog(@"Gesture Tag: %d", tapImageView.tag);
}
上記のように、4つの異なる画像があり、プログラムでそれらを作成しています。アニメーションを適用して、上から下に移動します。
ユーザーが画像をタップすると、アニメーション化して消えるはずです(そのコードは知っています)。しかし、コードはタップ イベントをトリガーしていません。関数の先頭にブレークポイントを設定しましたが、guessTapObject
そこには決して行きません。
UITapGestureRecognizer
宣言時guessTapObject
に、タップ アクションを実行するためにレコグナイザーにアタッチされていることがデバッグによって示されます。
タップ イベントがセレクター メソッドをトリガーしない理由を教えてください。
事前にご協力いただきありがとうございます。
編集済み: for ループを使用して、画像ビューごとにジェスチャ認識機能を個別に使用しようとしました
for (UIView * view in self.view.subviews) {
if (view.tag > 900){
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(guessTapObject:)];
tap.numberOfTapsRequired = 1;
tap.numberOfTouchesRequired = 1;
// tap.delegate = self;
[view addGestureRecognizer:tap];
NSLog(@"tapView: %@", tap.view);
NSLog(@"tap: %i", tap.enabled);
}
}