Проведите UIView от экрана

Я хотел бы иметь возможность иметь UIView (или, при необходимости, UIViewController), который можно "перетаскивать" / "щелкать" / "убирать" с экрана, но привязывать к вертикальной оси (чтобы вид был вверх или вниз от экран, чтобы показать вид ниже). Это что-то вроде веб-просмотров приложения Facebook.

Может ли это быть достигнуто с 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];
                }];
        }
    }

Вы можете настроить значения, при которых скользящее меню может перемещаться, и пороговые значения для определения, должен ли вид вернуться в исходное положение, или, например. уйди с экрана.

Другие вопросы по тегам