在开发应用程序时,我遇到了平移手势识别器过多的问题。我的第一个平移手势识别器位于 MainViewController 上,它是 RecipeSearchVC 的父级。此手势识别器向左或向右滑动整个视图。我在 RecipeSearchParametersVC 中的第二个平移手势识别器,它是页面视图控制器的父级。第三个平移手势手势识别器被添加到嵌套在由 PageViewController 表示的视图控制器内的 UIControl Wheel。
我知道这听起来很疯狂,可以说这是糟糕的设计。但是,我相信这是凝聚力的工作,它会很好。
当试图旋转滚轮时,它会在手势被 PageViewController 或 MainViewController 超越之前旋转一两秒。通常是 MainViewController 接管。我可以采用什么技术来清楚地区分这些手势识别器?
编辑:
在谈到平移手势识别器时,我的描述含糊不清,我深表歉意。MainViewController 有它自己的 UIPanGestureRecpgniser 允许它向左或向右移动所有内容。RecipeSearchParametersVC 只有一个 UIPanGestureRecogniser 因为它包含 UIPageViewController。它不添加手势识别器本身,而只是从 pageViewController 中获取它们。UIControl 的手势识别器允许它跟踪它应该经历的旋转。
在接受给出的建议时,我可能会从页面视图控制器中删除手势并用按钮替换它们。我只是想让它像 iBooks 中的图像(可以滚动以显示更多图像)一样工作,所以我认为它可以正常工作。
UIControl UIPanGestureRecognizer 代码
/**
* 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;
}