2011-02-07 57 views
0

我已將平底和手指姿勢連接到視圖。我想協調它們,以便在「UIGestureRecognizerStateChanged」狀態的每個完整的一個週期中,我想要採取協調操作來聚合每個更新的信息。具體來說,我的平底鍋控制翻譯和我的捏控制規模。我想在一個地方做翻譯和縮放的增量矩陣連接,而不是自主連接,導致不愉快的階梯式運動。如何協調兩個UIGestureRecognizers的行爲?

我盯着UIGestureRecognizerDelegate文檔,但沒有辦法讓它做我想做的事。

感謝,
道格

回答

0

嘗試是確保識別器正在「同時」的第一件事情。在你的代表中,你需要定義以下內容:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{   
    return (gestureRecognizer.view == otherGestureRecognizer.view); 
} 

根據我的經驗,這足以提供足夠順暢的體驗。但是,如果不是,那麼我只會從其中一個識別器更新變換,將另一個狀態存儲在屬性中。假設您已聲明一個名爲cachedScale的CGFloat屬性,該屬性在初始化程序中設置爲1.0。然後在你捏和平移處理程序,你會做到以下幾點:

- (IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer 
{  
    self.cachedScale *= recognizer.scale; 
} 

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer 
{ 
    CGAffineTransform transform = CGAffineTransformMakeScale(self.cachedScale, self.cachedScale); 
    self.cachedScale = 1.0; 

    CGPoint translation = [recognizer translationInView:recognizer.view.superview]; 
    CGAffineTransformTranslate(transform, translation.x, translation.y); 

    // do something with your transform 
} 

如果你只是想隨意拖動一個視圖,你可能有更多的運氣改變視圖的中心,而不是應用轉換到它的轉變。