UITapGestureRecognizer不会在以编程方式创建的UIImageView上触发

eag*_*gle 3 iphone uiimageview ios uitapgesturerecognizer xcode4.5

我正在使用XCode 4.5.1.

<UIGestureRecognizerDelegate>在.h文件和.m文件的开头添加了

@interface FirstViewController ()

@property (nonatomic, strong) UIImageView *img1;

@end
Run Code Online (Sandbox Code Playgroud)

然后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];
Run Code Online (Sandbox Code Playgroud)

然后

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];
Run Code Online (Sandbox Code Playgroud)

最后

- (void)guessTapObject:(UITapGestureRecognizer *) gesture
{
    // guessing the image
    UIImageView *tapImageView = (UIImageView*) gesture.view;
    NSLog(@"Gesture Tag: %d", tapImageView.tag);
}
Run Code Online (Sandbox Code Playgroud)

我有4个不同的图像,并按上述方式以编程方式创建它们.并应用动画将它们从上到下移动.

我希望当用户点击图像时,它应该动画并消失(我知道代码).但是代码没有触发tap事件.我把断点放在guessTapObject函数的开头,但不要去那里.

UITapGestureRecognizer声明时,调试显示guessTapObject附加到识别器以执行点击操作.

请帮助为什么tap事件没有触发它的选择器方法???

感谢您的帮助.


编辑:我也尝试使用for循环为每个imageview分别设置手势识别器

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Mos*_*sad 5

我遇到了类似的问题.确保imageView对于userInteraction设置为true.

imageView.userInteractionEnabled = YES;
Run Code Online (Sandbox Code Playgroud)

它对我有用!