1

我希望能够拥有一个 UIView(或者,如有必要,UIViewController),它可以被“拖动”/轻弹/从屏幕上滑出 - 但锁定在垂直轴上(因此视图会在屏幕以显示下面的视图)。这有点像 Facebook 应用程序的网络视图。

这可以通过 UIGravityBehavior 实现吗?

任何想法都会很棒。

4

1 回答 1

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];
                }];
        }
    }

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

于 2015-09-24T13:19:18.327 回答