【问题标题】:Swipe UIView off screen将 UIView 滑出屏幕
【发布时间】:2015-09-24 12:22:28
【问题描述】:
我希望能够拥有一个 UIView(或者,如有必要,UIViewController),它可以被“拖动”/轻弹/滑出屏幕 - 但锁定到垂直轴(因此视图会向上或关闭屏幕以显示下面的视图)。这有点像 Facebook 应用程序的网络视图。
这可以通过 UIGravityBehavior 实现吗?
任何想法都会很棒。
【问题讨论】:
标签:
ios
objective-c
uiview
gesture
uigravitybehavior
【解决方案1】:
我不久前使用 UIPanGestureRecognizer 做了类似的事情。以下是它的工作原理:
float slidingMenuOffsetSum;
- (void)handleSlidingMenuPan:(UIPanGestureRecognizer *)gestureRecognizer {
CGPoint translation = [gestureRecognizer translationInView:_slidingMenuView];
slidingMenuOffsetSum += translation.y;
CGPoint newSlidingMenuCenter = CGPointMake(_slidingMenuView.center.x, _slidingMenuView.center.y + translation.y);
if (_slidingMenuView.frame.origin.y <= 512 && _slidingMenuView.frame.origin.y >= 0) {
_slidingMenuView.center = newSlidingMenuCenter;
}
[gestureRecognizer setTranslation:CGPointZero inView:_slidingMenuView];
if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
[UIView animateWithDuration:0.3
animations:^{
[_slidingMenuView setUserInteractionEnabled:false];
if (slidingMenuOffsetSum > 0) {
if (slidingMenuOffsetSum > _slidingMenuView.frame.size.height / 4) {
[self setSlidingMenuHidden:false];
} else {
[self returnSlidingMenuToPosition];
}
} else {
if (slidingMenuOffsetSum < -_slidingMenuView.frame.size.height / 4) {
[self setSlidingMenuHidden:true];
} else {
[self returnSlidingMenuToPosition];
}
}
}
completion:^(BOOL finished) {
slidingMenuOffsetSum = 0;
[_slidingMenuView setUserInteractionEnabled:true];
}];
}
}
您可以调整滑动菜单可以移动的值,以及检测视图是否应该返回其原始位置的阈值,或者例如。离开屏幕。