我有一個2D圖,用戶可以使用手勢識別器進行縮放和平移。雖然它起作用,但我希望用戶在放大1個手指後立即開始平移。不幸的是,在該文檔中,它說:當1個手指在屏幕上擡起時禁用捏夾識別器
的手勢結束(UIGestureRecognizerStateEnded)當兩個手指從視圖 電梯。
這是假裝我從一個捏縮放到平底鍋馬上。我能做些什麼來解決這個問題?
我有一個2D圖,用戶可以使用手勢識別器進行縮放和平移。雖然它起作用,但我希望用戶在放大1個手指後立即開始平移。不幸的是,在該文檔中,它說:當1個手指在屏幕上擡起時禁用捏夾識別器
的手勢結束(UIGestureRecognizerStateEnded)當兩個手指從視圖 電梯。
這是假裝我從一個捏縮放到平底鍋馬上。我能做些什麼來解決這個問題?
這是可能的,而且容易!它涉及到你的手勢識別器的代表。似乎沒有人知道存在的東西。在我的視圖控制器子類,我已宣佈既符合協議<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」,並來回。