我想有一个只能水平移动UIView的平移手势。

到目前为止,在平移手势开始时,只允许水平移动,但是一旦
平移手势开始后,UIView会水平和垂直移动。


如何始终阻止UIView垂直移动?
有什么办法可以使UIView的顶部始终位于屏幕顶部?


即它永远不会从其设置位置垂直移动

这是我当前的代码:

- (void)panePanned:(UIPanGestureRecognizer *)gestureRecognizer
{
    switch (gestureRecognizer.state) {
        case UIGestureRecognizerStateBegan: {
            self.paneStartLocation = [gestureRecognizer locationInView:self.mainView];
            self.paneVelocity = 0.0;
            break;
        }
        case UIGestureRecognizerStateChanged: {
            CGPoint panLocationInPaneView = [gestureRecognizer locationInView:self.mainView];
            CGFloat velocity = -(self.paneStartLocation.x - panLocationInPaneView.x);
            CGRect newFrame = self.mainView.frame;

            newFrame.origin.x += (panLocationInPaneView.x - self.paneStartLocation.x);
            if (newFrame.origin.x < 0.0) newFrame.origin.x = 0.0;
            self.mainView.frame = newFrame;

            if (velocity != 0) {
                self.paneVelocity = velocity;
            }
            break;
        }
        case UIGestureRecognizerStateEnded: {
            [self animate];
            break;
        }
        default:
            break;
    }
}


谢谢!

最佳答案

尝试在开始状态禁用滚动,然后在结束状态重新启用滚动。

[scrollView setScrollEnabled:NO];    // in case UIGestureRecognizerStateBegan
[scrollView setScrollEnabled:YES];   // in case UIGestureRecognizerStateEnded

10-08 09:36
查看更多