我正在制作一个简单的笔记/绘画应用程序。我有一个像纸/画布一样工作的视图控制器。在其中我想实现UISwipeGestureRecognizer,例如,当用户快速想要显示菜单时他或她可以向上滑动而不是点击我的“编辑”按钮,或者当他/她想要更换纸张时可能向左或向右滑动注意:
问题是,当用户滑动(用两根手指)时,应用程序也会沿同一方向画一条短线。
我已经实现了这样的UISwipeGestureRecognizer:
UISwipeGestureRecognizer *recognizer;
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self
action:@selector(handleSwipeFrom:)];
[recognizer setDirection:(UISwipeGestureRecognizerDirectionUp)];
recognizer.numberOfTouchesRequired = 2;
[[self view] addGestureRecognizer:recognizer];
[recognizer release];
// Delegate method
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
return YES;
}
// Helper method for handeling swipes
-(void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer {
if (recognizer.direction == UISwipeGestureRecognizerDirectionUp) {
[self enableEditingMode];
}
}
绘制机制在同一控制器的以下方法中处理:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
上面的三种方法似乎在我的UIGestureRecognizer之前被调用了。我试图创建一个BOOL变量,如果布尔变量为YES,则禁用绘制代码。但这没效果。关于如何解决这个问题的任何其他想法都会很棒!
注意:我正在模拟器中进行滑动测试。也许会影响到它?
答案 0 :(得分:1)
您需要确保同时实施
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
然后您可以撤消触摸。
答案 1 :(得分:0)
在我看来,注册手势识别器和放大器。触摸*方法不是一个好主意。他们必然会相互干涉。您应该只注册touches *方法,并确定它是否是滑动。如果是在必要方向上滑动,请不要画画。
答案 2 :(得分:-1)
我可能已经开始工作了。虽然只是在模拟器中进行了测试,但不确定它是否可以在设备上运行,因为模拟器会立即识别出两个手指触摸。解决方案看起来像这样(从http://www.iphonedevsdk.com/forum/iphone-sdk-development/23537-implemented-touchesbegan-only-giving-me-one-touch.html开始):
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *allTouches = [touches setByAddingObjectsFromSet:[event allTouches]];
if (allTouches.count== 1) {
if (isUsingPen) {
[self painting:touches];
}
if (isUsingEraser) {
[self erasing:touches];
}
}
}
如果这也适用于某个设备,或者还有其他人在设备上尝试过此方法,我会通知我吗?