在开发一个应用程序时,我遇到了一个问题,即手势识别器过多。第一个手势识别器位于MainViewController中,它是RecipeSearchVC的父级。这个手势识别器可以使整个视图左右滑动。第二个手势识别器位于RecipeSearchParametersVC中,它是一个页面视图控制器的父级。第三个手势识别器被添加到一个UIControl Wheel中,它嵌套在由PageViewController表示的视图控制器中。
我知道这听起来很疯狂,也可以说这是设计不良。然而,我相信如果能够有机地协同工作,那么这将是可以接受的。
当尝试旋转轮子时,在手势被PageViewController或MainViewController接管之前,它会旋转一两秒钟。往往是MainViewController接管得更多。我应该采取什么技术手段来清晰地区分每个手势识别器?
编辑:
对于我的手势识别器的描述过于含糊,我向大家道歉。 MainViewController有自己的UIPanGestureRecogniser,可以使其向左或向右移动所有内容。 RecipeSearchParametersVC只有一个UIPanGestureRecogniser,因为它包含一个UIPageViewController。它并没有添加手势识别器,而是从pageViewController中获取它们。 UIControl的手势识别器允许它跟踪应该发生的旋转。
根据所给的建议,我可能会从页面视图控制器中删除手势,并用按钮替换它们。我只希望它能像在iBooks中找到的图片一样工作(可以滚动以显示更多的图片),所以我认为这应该没问题。
UIControl UIPanGestureRecogniser Code
/**
* sent to the control when a touch related to the given event enters the control’s bounds
*
* @param touch uitouch object that represents a touch on the receiving control during tracking
* @param event event object encapsulating the information specific to the user event
*/
- (BOOL)beginTrackingWithTouch:(UITouch *)touch
withEvent:(UIEvent *)event
{
[super beginTrackingWithTouch:touch withEvent:event];
CGPoint touchPoint = [touch locationInView:self];
// filter out touchs too close to centre of wheel
CGFloat magnitudeFromCentre = [self calculateDistanceFromCentre:touchPoint];
if (magnitudeFromCentre < 40) return NO;
// calculate distance from centre
CGFloat deltaX = touchPoint.x - _container.center.x;
CGFloat deltaY = touchPoint.y - _container.center.y;
// calculate the arctangent of the opposite (y axis) over the adjacent (x axis) to get the angle
_deltaAngle = atan2(deltaY, deltaX);
_startTransform = _container.transform;
// selection in limbo so set all sector image's to minimum value by changing current one
[self getSectorByValue:_currentSector].alpha = kMinimumAlpha;
return YES;
}