0

我很新的iOS開發。首先讓我解釋我的問題。iphone手勢/事件類似鼠標進入閃存

在Adobe Flash中,有一個鼠標事件使我能夠檢測鼠標進入動畫片段。 因此,例如,假設我有一個主容器影片剪輯,並且裏面有一堆對象。如果我將鼠標拖到這些對象上,它們會 - 例如 - 改變它們的顏色。

在IOS中,我有一個用作容器的主視圖,裏面我填充了幾個UIViews,它們的顏色設置爲某種顏色-blue-。我想要實現的是,當我點擊並開始移動手指時,我想讓手指下的那些改變它們的顏色。 我使用下面的代碼:

for (int i=0;i<8;i++) 
{ 
    for(int j=0; j<8; j++) 
    { 
     UIPanGestureRecognizer * gesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureCaptured:)]; 
     UIView * test = [[UIView alloc] initWithFrame:CGRectMake(i*34, j*34, 32, 32)]; 
     [test setBackgroundColor:[UIColor blueColor]]; 
     [self.view addSubview:test]; 
     [test addGestureRecognizer:gesture]; 
    } 
} 

而對於處理程序:

-(void) panGestureCaptured:(UIPanGestureRecognizer*)sender 
{ 
    [sender.view setBackgroundColor:[UIColor redColor]]; 
} 

但問題是,只有第一個的顏色變化。 當然,這可能會帶來性能問題:雖然只有一次捕捉和顏色變化就足夠了;當我的手指在正方形內時,處理程序/動作被多次調用。

那麼,任何建議如何處理這種類型的問題?

在此先感謝。

+0

開始在Xcode中輸入「UIControlEvent ...」並查看彈出的所有選項。 – 2012-07-18 20:47:45

回答

1

問題是隻有第一個子視圖中的手勢識別器纔會反應,所以手勢中不在其區域內的觸摸沒有任何效果。你可以試試這個:

-(void) panGestureCaptured:(UIPanGestureRecognizer*)sender 
{ 
    for(NSUInteger i=0;i<[sender numberOfTouches];i++) 
    { 
     CGPoint touchPt = [sender locationOfTouch:i inView:self.view]; 
     for(UIView *subV in [self.view subviews]) 
     { 
      if(CGRectContainsPoint(c.frame, touchPt)) 
      { 
       subV.backgroundColor = [UIColor whiteColor]; //or whatever 
       break; //assumes no overlapping 
      } 
     } 
    } 
}