2011-09-24 87 views
1

我有一個UIViewController檢測觸摸事件與touchesBegan。有移動的UIImageView對象浮在屏幕上,我需要看看觸摸事件是否落在其中一個上。我在嘗試:檢測觸摸是否在移動UIImageView從視圖控制器

UITouch* touch = [touches anyObject]; 

if ([arrayOfUIImageViewsOnScreen containsObject: [touch view]]) { 
    NSLog(@"UIImageView Touched!"); 
} 

但是,這從來沒有發生過。另外如果我做這樣的事情:

int h = [touch view].bounds.size.height; 
NSLog([NSString stringWithFormat: @"%d", h]); 

它輸出整個UIViewController的(屏幕)每次的高度,即使我碰的UIImageViews之一,所以顯然[touch view]是不是給我的UIImageView。如何檢測何時只有UIImageView被按下?請不要使用UIButtons。

謝謝!

回答

0

忘了這個問題 - 問題是我沒有等到viewDidLoad在我的UIImageView上設置userInteractionEnabled。

0

我知道你說過,請不要使用UIButtons,但按鈕聽起來像最好/最簡單的方式給我。

0

您可以嘗試使用其中一個觸摸向主視圖的CALayer發送hitTest消息 - 它會將CALayer返回到您觸摸的子視圖層次結構的最遠處。

然後,您可以測試以查看您觸摸的圖層是否爲UIImageView的圖層之一,然後從此處繼續。

此代碼使用從UIGestureRecognizer生成的點。

CGPoint thePoint = [r locationInView:self.view]; 
thePoint = [self.view.layer convertPoint:thePoint toLayer:self.view.layer.superlayer]; 
selectedLayer = [self.view.layer hitTest:thePoint]; 
1

如果只想當按下一個UIImageView檢測,檢查類:

if (touch.view.class == [UIImageView class]) { 
    //do whatever 
} 
else { 
    //isnt a UIImageView so do whatever else 
} 

編輯----

您沒有設置用戶交互爲啓用UIImageView有你嗎?!