我想有一个只能水平移动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