【发布时间】:2013-04-23 09:45:02
【问题描述】:
我正在使用 XCode 4.5.1。
我在 .h 文件和 .m 文件的开头添加了<UIGestureRecognizerDelegate>
@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);
}
}
【问题讨论】:
-
我尝试了您发布的代码,它对我来说工作正常。我收到回调。如果您使用多个图像,您也需要创建不同的 UITapGestureRecognizer。对于一张图片,代码应该可以正常工作,请检查是否有任何内容为零或您的生成代码没有被调用或其他什么。
-
这行得通,确保在将 y 线设置为 -30 时点击的是哪个图像,检查一下。
-
@amit3117 .... 我也尝试使用 for 循环为每个图像添加单独的手势识别器,但在我的最后不起作用。
-
@unbounded 显示你的 for 循环代码。
-
@Navnath.... 因为我正在为我的图像设置动画,所以它正在移动并将在动画开始时显示(动画正在运行)。好的,我也向您展示 for 循环代码。我还尝试通过评论
tap.delegate = self;这一行。但它也没有解决问题。
标签: iphone ios uiimageview xcode4.5 uitapgesturerecognizer