如何在UIPanGestureRecognizer中使用两个操作?
问题描述:
我正在处理两个子视图。每个将是独特的,并有它自己的“行动”。如何在UIPanGestureRecognizer中使用两个操作?
子视图1 =用户可以拖动视图四周,旋转和缩放它
子视图2 =当用户在其屏上移动手指的图像在每个点他们的手指触摸加入。
我通过使用UIPanGestureRecognizer完成了这两个。我的问题是,我怎么能分开这两个行动?我希望能够添加一个子视图,执行所需的操作,然后在添加其他子视图时防止发生以前的操作。
以下是我已经尽力了,这是我panGesture方法进行:
for (UIView * subview in imageView.subviews)
{
if ([subview isKindOfClass:[UIImageView class]])
{
if (subview == _aImageView)
{
CGPoint translation = [panRecognizer translationInView:self.view];
CGPoint imageViewPosition = _aImageView.center;
imageViewPosition.x += translation.x;
imageViewPosition.y += translation.y;
_aImageView.center = imageViewPosition;
[panRecognizer setTranslation:CGPointZero inView:self.view];
}
else if (subview == _bImageView)
{
currentTouch = [panRecognizer locationInView:self.view];
CGFloat distance = [self distanceFromPoint:currentTouch ToPoint:prev_touchPoint];
accumulatedDistance += distance;
CGFloat fixedDistance = 60;
if ([self distanceFromPoint:currentTouch ToPoint:prev_touchPoint] > fixedDistance)
{
[self addbImage];
prev_touchPoint = currentTouch;
}
}
}
}
答
如果你想在两种不同的观点不同的手势识别,把单独识别每个视图。
答
通常,您希望让您的视图控制器拥有并管理手势识别器,例如,
- (void)viewDidLoad {
self.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
self.panGesture.delegate = self;
[self.viewX addGestureRecognizer:self.panGesture];
// repeat with other recognisers...
}
请注意,设置你的控制器作为gestureRecognizer的代表是非常重要的:这使您可以处理从视图控制器下面的委托方法(这是主要的问题):
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
// handle your logic, which gestureRecognizer should proceed...
return NO;
}
处理程序方法与此例相同,但您可以根据需要设置自己的处理程序:
- (void)handleGesture:(UIGestureRecognizer*)gestureRecognizer {
// handle gesture (usually sorted by state), e.g.
// if(gesture.state == UIGestureRecognizerStateEnded) { ... }
}
好的。我已经完成了,但我怎么只允许一个手势被称为?因此,如果我先将一个ImageView作为子视图添加,然后将bImageView添加为子视图,则仍会添加一个ImageView,并且它的手势处于活动状态。 –