簡體   English   中英

如何在UIScrollview中檢測UIImageView上的觸摸?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM