Как вы представляете UIViewController сверху, а не снизу? - PullRequest
2 голосов
/ 01 сентября 2011

Я использую UIViewController и использую presentModalViewController: controllerr animated: YES, чтобы представить его, но я хотел бы, чтобы он скользил вниз сверху вниз, а не снизу, каким-либо образом это сделать?

Ответы [ 5 ]

7 голосов
/ 06 февраля 2013

Я создал функцию для нажатия ViewControllers со всех четырех направлений:

- (void) slideLayerInDirection:(NSString *)direction andPush:(UIViewController *)dstVC {
  CATransition* transition = [CATransition animation];
  transition.duration = 0.5;
  transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
  transition.type = kCATransitionPush;
  transition.subtype = direction;
  [self.view.layer addAnimation:transition forKey:kCATransition];
  [self pushViewController:dstVC animated:NO];
}

Файл заголовка содержит следующее:

#import <QuartzCore/QuartzCore.h>

#define direction_left kCATransitionFromLeft
#define direction_top kCATransitionFromBottom
#define direction_right kCATransitionFromRight
#define direction_bottom kCATransitionFromTop
3 голосов
/ 09 марта 2016
public extension UINavigationController {

    func pushViewControllerFromTop(viewController vc: UIViewController) {
        vc.view.alpha = 0
        self.present(vc, animated: false) { () -> Void in
            vc.view.frame = CGRect(x: 0, y: -vc.view.frame.height, width: vc.view.frame.width, height: vc.view.frame.height)
            vc.view.alpha = 1
            UIView.animate(withDuration: 1, 
                           animations: { () -> Void in
                               vc.view.frame = CGRect(x: 0, y: 0, width: vc.view.frame.width, height: vc.view.frame.height)
                           }, 
                           completion: nil)
        }
    }

    func dismissViewControllerToTop() {
        if let vc = self.presentedViewController {
            UIView.animate(withDuration: 1, 
                           animations: { () -> Void in
                               vc.view.frame = CGRect(x: 0, y: -vc.view.frame.height, width: vc.view.frame.width, height: vc.view.frame.height)
                           }, 
                           completion: { complete -> Void in
                               if complete {
                                   self.dismiss(animated: false, completion: nil)
                               }
                           })
        }
    }
}
2 голосов
/ 25 марта 2014

Я использую следующий код для анимации viewController сверху.

[self.mainViewController.view addSubview:modalViewController.view];
modalViewController.view.frame = CGRectMake(modalViewController.view.frame.origin.x,
                                            -modalViewController.view.frame.size.height,
                                            modalViewController.view.frame.size.width,
                                            modalViewController.view.frame.size.height);

[UIView animateWithDuration:0.4 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^(void){

    modalViewController.view.frame = CGRectMake(modalViewController.view.frame.origin.x,
                                                0,
                                                modalViewController.view.frame.size.width,
                                                modalViewController.view.frame.size.height);

} completion:^(BOOL finished){

    [modalViewController.view removeFromSuperview];
    [self.mainViewController presentViewController:modalViewController animated:NO completion:nil];

}];

Он добавляет UIView из modalViewController к mainViewController, анимирует его, затем удаляетUIView из mainViewController и presentsViewController: без анимации.

1 голос
/ 06 февраля 2013

Вы должны #import QuartzCore рамки и добавить анимацию перехода, а затем изменить:

animated:YES чтобы: animated:NO.

1 голос
/ 01 сентября 2011

То, что вы описываете, не является встроенным стилем перехода;см. здесь для получения списка тех, что предоставляет Apple.Если вам абсолютно нужен ваш контроллер вида, чтобы появиться таким образом, вам придется анимировать его самостоятельно.

...