你问:
基本上,我想知道,如果发生UIGestureRecognizerStateEnded
应UIGestureRecognizer
仍然处理触摸,或在该点已全部完成接触?
当你得到UIGestureRecognizerStateEnded
,是的,手势完成。但显然,除非您在该位置从视图中移除手势识别器,否则如果用户开始新手势,手势识别过程将从UIGestureRecognizerStateBegan
开始重新开始。
而且,你说:
我越来越怪异值translationInView
所以只是想问问这里。
你的代码示例建议你处理一个捏手势,它不会做translationInView
,所以我不确定你会得到什么“奇怪的值”。你可以,但通过设置有两个同时手势你的手势的delegate
和实施shouldRecognizeSimultaneouslyWithGestureRecognizer
:
- (void)viewDidLoad
{
[super viewDidLoad];
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self
action:@selector(handlePinch:)];
pinch.delegate = self;
[self.view addGestureRecognizer:pinch];
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self
action:@selector(handlePan:)];
pan.delegate = self;
[self.view addGestureRecognizer:pan];
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]])
return YES;
if ([gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]])
return YES;
return NO;
}
- (void)handlePinch:(UIPinchGestureRecognizer *)gesture
{
CGFloat scale = [gesture scale];
NSLog(@"%s: %@: scale=%.2f", __FUNCTION__, [self stringFromGestureState:gesture.state], scale);
}
- (void)handlePan:(UIPanGestureRecognizer *)gesture
{
CGPoint translation = [gesture translationInView:gesture.view];
NSLog(@"%s: %@: translation=%@", __FUNCTION__, [self stringFromGestureState:gesture.state], NSStringFromCGPoint(translation));
}
上面的代码工作,其中handlePan
返回盘中,handlePinch
返回代打的handlePan
的translationInView
看起来平常。也许你可以告诉我们你是如何使用一个捏手势,并获得translationInView
,并告诉我们你得到的值有什么奇怪的。
来源
2013-03-26 08:28:11
Rob