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用戶響應事件