[英]How to detect touch on UIImageView inside UIScrollview?
我在我的應用程序中有一個UIScrollview,我用大量的UIImageViews填充它大約900.它們都很小,一次又一次只包含兩個不同的圖像。
現在我在檢測其中一個UIImageViews上的觸摸時遇到了很多麻煩。
我已經為他們分配了一個獨特的標簽,以便能夠區分它們,但我真的很難發現觸摸。
目標只是能夠更改觸摸的UIImageView的圖像。
由於涉及大量的視圖,一個簡單的循環檢查觸摸坐標對每個UIImageViews框架只是懸掛我的應用程序。
有沒有人有什么建議?
提前致謝。
本
在我的情況下,最簡單的方法是添加一個手勢識別器:
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
//Default value for cancelsTouchesInView is YES, which will prevent buttons to be clicked
singleTap.cancelsTouchesInView = NO;
[myScrollView addGestureRecognizer:singleTap];
然后使用此方法捕獲觸摸:
- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
{
CGPoint touchPoint=[gesture locationInView:myScrollView];
}
UIImageView默認關閉觸摸處理。 要將userInteractionEnabled設置為YES(請參閱此處的文檔http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIImageView_Class/Reference/Reference.html )
此外,如果您想知道在視圖層次結構中命中了哪個視圖,您可以使用hitTest:withEvent:
請參閱UIView中的文檔),這將比循環遍歷層次結構快得多。
從更廣泛的角度來看,我不認為在屏幕上同時擁有900個UIImageView將是一個很好的長期戰略。 你有沒有調查過通過CoreGraphics繪制屏幕的內容?
您可以在UIImageView對象上輕松實現此方法:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if ([self pointInside:point withEvent:event]) {
//You clicked inside the object
}
return [super hitTest:point withEvent:event]
}
使用return告訴應用程序下一個觸摸響應器(例如uiimageview或scrollview)。
解決此問題的最佳方法是將UIScrollView子類化,向其添加touchesBegan等方法。
@interface MyScroll : UIScrollView
{
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.