Mar*_*ltz 2 objective-c swipe ios
我正在使用PanGestureRecognizer,在UIGestureRecognizerStateChanged中,我让用户手指移动屏幕上的视图.我正在使用它作为Tinder,如滑动手势,我现在想要限制视图移动到水平轴或垂直轴,无论用户开始滑动的方向.我一直在上下搜索,但在这里找不到合适的东西.
是否有任何聪明的方法来限制轴的移动,根据用户开始滑动视图的方向?
谢谢你!
更新:这是移动视图的当前代码:
- (void)dragged:(UIPanGestureRecognizer *)gestureRecognizer
{
CGFloat xDistance = [gestureRecognizer translationInView:self].x;
CGFloat yDistance = [gestureRecognizer translationInView:self].y;
// xDistance = 0;
[parentView dragged:yDistance];
switch (gestureRecognizer.state) {
case UIGestureRecognizerStateBegan:{
self.originalPoint = self.center;
break;
};
case UIGestureRecognizerStateChanged:{
CGFloat rotationAngel = 0;
CGFloat scale = 1;//MAX(scaleStrength, 0.93);
CGAffineTransform transform = CGAffineTransformMakeRotation(rotationAngel);
CGAffineTransform scaleTransform = CGAffineTransformScale(transform, scale, scale);
self.transform = scaleTransform;
self.center = CGPointMake(self.originalPoint.x + xDistance, self.originalPoint.y + yDistance);
...
break;
};
case UIGestureRecognizerStateEnded: {
float moveDistAction = 60;
if (yDistance > moveDistAction) {
// view swiped down
...
} else if (yDistance < -moveDistAction) {//100 150
// view swiped up
...
} else {
// dragging cancelled
...
}
break;
};
case UIGestureRecognizerStatePossible:break;
case UIGestureRecognizerStateCancelled:break;
case UIGestureRecognizerStateFailed:break;
}
}
Run Code Online (Sandbox Code Playgroud)
在gestureRecognizerShouldBegin:你可以知道方向:
- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer {
CGPoint translation = [gestureRecognizer translationInView:self.view];
self.isVerticalPan = fabs(translation.y) > fabs(translation.x); // BOOL property
return YES;
}
Run Code Online (Sandbox Code Playgroud)
然后在UIGestureRecognizerStateChanged你可以做这样的事情,基于isVerticalPan属性:
CGPoint translation = [gesture translationInView:self.view];
CGPoint displacement = (self.isVerticalPan) ? CGPointMake(0, translation.y) : CGPointMake(translation.x, 0);
self.viewToMove.transform = CGAffineTransformMakeTranslation(displacement.x, displacement.y);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3518 次 |
| 最近记录: |