UIView类可以响应Touth事件,我们可以给UIView类关联触摸响应的方法,以UIImageView为例子,为UIImageView关联响应的方法
// 创建一个imageView
CGRect imageRect = CGRectMake(10, 10, width-20, width-20);
UIimageView* imageView = [[UIImageView alloc]initWithFrame:imageRect];
imageView.image = [UIImage imageNamed:imageUrl];
imageView.layer.masksToBounds =YES;
imageView.layer.cornerRadius =60;
//添加关联的方法 shopTap:
UITapGestureRecognizer *Tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(shopTap:)];
Tap.numberOfTapsRequired = 1;//点击一次触发
Tap.numberOfTouchesRequired = 1;//点击需要的手指数量
[imageView addGestureRecognizer:Tap];
但是有时候发现添加了 gesture也不能响应方法,原因是:特殊子类的覆盖
userInteractionEnabled属性默认值为YES,但UIView的一些子类中对该属性进行了覆盖,并将其默认值设置为了NO,其中UIImageView和UILabel就是这样的类 。userInteractionEnabled属性在UIImageView和UILabel的文档中都有简单的描述。在实际的界面开发过程中,我们经常用UIImageView来模拟按钮或其它可以响应用户touch事件的显示区,并通过gesture来为其添加事件响应,因此为了保证事件能正常的接受,我们必须要显示的将UIImageView对象的userInteractionEnabled的值设为YES 。
[imageView setUserInteractionEnabled:YES];
然后就可以响应shopTap方法了
- (void)shopTap:(UITapGestureRecognizer *)tapGesture
{
//do something
}
userInteractionEnabled属性介绍
UIView用户响应事件