2012-03-17 80 views
9

我在我的應用程序中實現了拖放/調整大小/旋轉標籤。到目前爲止,除了UIRotationGestureRecognizer手勢之外,所有內容都正在工作。更具體地說,它不適用於UIPinchGestureRecognizer手勢。iPhone iOS如何讓UIRotationGestureRecognizer和UIPinchGestureRecognizer一起工作來縮放和旋轉帶有子視圖的UIView?

通常兩個手勢競爭兩個手指觸摸,所以我正在並行運行它們。以下是手勢識別器調用的2種方法。

當做旋轉手勢,視圖圍繞它的中心旋轉,它的高度和寬度變化如下:高度變成寬度,寬度慢慢變成高度。最終,視圖消失。

在視圖中,我有另一個自動調整大小的視圖。通常,捏合手勢也會自動調整子視圖的大小,但在這種情況下,自動調整遮罩的子視圖消失。子視圖有高度和寬度的彈簧和左/頂撐杆。

我在做什麼錯?我怎樣才能用手勢調整和縮放UIView?

所有委託方法和連接都正確設置。 我需要了解如何處理識別器應用縮放和旋轉的順序。

//makes 2 gesture recognizers behave together 
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 
    return YES; 
} 

- (IBAction)handleRotationFrom:(id)sender { 
    NSLog(@"Gesture rotation %.1f", rotationGestureRecognizer.rotation); 

//attempt to continuously rotate the label, starting with a remembered rotation  

    float rotation = atan2(activeCompanionLabelView.transform.b, activeCompanionLabelView.transform.a); 
    NSLog(@"existing rotation %.1f", rotation); 

// rotation = rotation<0?(2*M_PI)-fabs(rotation):rotation; 
    rotation +=rotationGestureRecognizer.rotation; 

    NSLog(@"*** gesture rotation %.1f sum: %.1f, saved: %.1f",rotationGestureRecognizer.rotation, rotation, activeCompanionLabelView.savedRotation); 
    activeCompanionLabelView.transform = CGAffineTransformMakeRotation((rotation)); 
    activeCompanionLabelView.savedRotation = rotation; 
} 

- (IBAction)handlePinch:(id)sender { 
    NSLog(@"pinch %.2f", pinchGestureRecognizer.scale); 

//resize, keeping the origin where it was before 

    activeCompanionLabelView.frame = CGRectMake(activeLabelContainerFrame.origin.x, activeLabelContainerFrame.origin.y, activeLabelContainerFrame.size.width*pinchGestureRecognizer.scale, activeLabelContainerFrame.size.height*pinchGestureRecognizer.scale);  



} 

回答

10

如果你希望兩個gestureRecognisers並行(同時)運行 view應該實現<UIGestureRecognizerDelegate>

另外,您應該讓它成爲gestureRecognizers的代表。

rotationGestureRecognizer.delegate=self; 
pinchGestureRecognizer.delegate=self; 

而且你還應該實現shouldRecognizeSimultaneouslyWithGestureRecognizer:方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 

    return YES; 
} 

注意:如果你有更多然後這兩gestureRecognisersview你得加入一些身份在這個方法檢查。

編輯:

剛剛發現奧萊Begemann關於這個話題的文章:Gesture Recognition on iOS with Attention to Detail

+0

我已經有這個代碼到位。我用這個信息澄清了這個問題。 – 2012-03-17 17:15:37

+0

@AlexStone:我明白了。我現在不在我的Mac上,但需要對此進行一些測試。如果沒有人出面,我可以明天表達我的答案。 – 2012-03-17 17:19:19

+0

我現在有同樣的概率..你有解決這個問題嗎? – Prathiba 2012-06-12 08:46:34

相關問題