2011-06-16 115 views
20

我試圖實現類似於Touch Up InsideUIButton的觸摸事件。我看過一些使用touchesBegan:withEvent的代碼,但看起來我需要在屏幕上滑動一下手指。其實我只是想形象觸摸內部的UIImageView

守則摸:

- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { 
    NSLog(@"Image touched!"); 
} 

商祺!

+1

是否有任何特殊的原因,你不能只使用'UIButton'自定義樣式和圖像? – pmdj 2011-06-16 13:19:06

+0

其實不是,但我想知道是否有其他方法可以做到。 – Claudio 2011-06-16 13:23:53

+0

如果您不需要'UIButton'提供的功能,則可以直接使用更簡單的'UIControl'子類或使用更多的'UIControl'。 'UIControl'負責所有惡劣的觸摸狀態管理,所以你不必這樣做。自己動手也意味着你的用戶界面的行爲與所有其他應用程序的行爲略有不同,這可能會讓用戶感到困惑。 – pmdj 2011-06-16 13:28:16

回答

46

您可以使用手勢聯繫UIImageView

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] 
         initWithTarget:self action:@selector(ClickEventOnImage:)]; 
     [tapRecognizer setNumberOfTouchesRequired:2]; 
     [tapRecognizer setDelegate:self]; 
     //Don't forget to set the userInteractionEnabled to YES, by default It's NO. 
     myImageView.userInteractionEnabled = YES; 
     [myImageView addGestureRecognizer:tapRecognizer]; 

執行ClickEventOnImage函數。

-(void) ClickEventOnImage:(id) sender 
{ 

} 
+0

+1好極了!感謝分享,非常好的解決方案! :) – jpswain 2011-07-19 04:38:24

+0

爲我節省了很多時間!謝謝 – 2011-09-22 20:15:49

+1

那岩石。在處理器方法中,可以通過使用locationInView:(UIView *)視圖查詢手勢識別器來獲取水龍頭的位置;在滾動視圖中,返回的座標包含滾動的內容偏移量。 – Oscar 2011-10-25 22:36:32

6

UIImageView是臭名昭著其userInteractionEnabled被默認設置爲NO對此。你將不得不這樣做

imageView.userInteractionEnabled = YES; 

啓用它,然後你可以使用手勢識別或正常touches*方法來處理觸摸。