2012-01-22 24 views
1

我有一個2D圖,用戶可以使用手勢識別器進行縮放和平移。雖然它起作用,但我希望用戶在放大1個手指後立即開始平移。不幸的是,在該文檔中,它說:當1個手指在屏幕上擡起時禁用捏夾識別器

的手勢結束(UIGestureRecognizerStateEnded)當兩個手指從視圖 電梯。

這是假裝我從一個捏縮放到平底鍋馬上。我能做些什麼來解決這個問題?

回答

5

這是可能的,而且容易!它涉及到你的手勢識別器的代表。似乎沒有人知道存在的東西。在我的視圖控制器子類,我已宣佈既符合協議<UIGestureRecognizerDelegate>和兩個實例變量:

UIPinchGestureRecognizer *myPinchGR; 
UIPanGestureRecognizer *myPanGR; 

這些高德在視圖實例做負載。注意將自己設置爲委託。

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    myPanGR = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panTarget:)]; 
    myPanGR.delegate = self; 
    [self.view addGestureRecognizer:myPanGR]; 

    myPinchGR = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchTarget:)]; 
    myPinchGR.delegate = self; 
    [self.view addGestureRecognizer:myPinchGR]; 
} 

一個接一個UIGestureRecognizer作出的委託電話是shouldRecognizeSimultaneouslyWithGestureRecognizer:如果我有兩個以上的手勢識別,則此函數必須包含一些邏輯。但由於只有兩個我可以只返回YES

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 
    return YES; 
} 

現在您必須在您的操作方法中包含一點(很少)額外的邏輯以篩選適當的條件。

-(void)panTarget:(UIPanGestureRecognizer *)panGR{ 
    if (panGR.numberOfTouches > 1) return; 
    NSLog(@"panny"); 
} 
-(void)pinchTarget:(UIPinchGestureRecognizer *)pinchGR{ 
    if (pinchGR.numberOfTouches < 2) return; 
    NSLog(@"pinchy"); 
} 

運行此代碼查看日誌。你會看到當你移動一個手指時,你會看到「panny」,當你放下第二根手指時,你會看到「pinchy」,並來回。