【问题标题】: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];
                    }];
            }
        }
    

    您可以调整滑动菜单可以移动的值,以及检测视图是否应该返回其原始位置的阈值,或者例如。离开屏幕。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2021-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多