ios - 将 uiviewcontroller 推送到另一个带有动画的 viewcontroller 从顶部 - 底部

标签 ios transition uianimation uinavigationcontroller

在我的项目中有一个功能,当用户在顶部栏上滑动时,一个屏幕将出现从上到下的动画

有两个 View Controller oneviewcontroller.m

- (void)swipe
{
    listViewController *list_obj=[[listViewController alloc] initWithNibName:@"listViewController" bundle:NULL];
    UIViewAnimationTransition trans = UIViewAnimationTransitionCurlUp;
    [UIView beginAnimations: nil context: nil];
    [UIView setAnimationTransition: trans forView: [self.view window] cache: YES];
    [self.navigationController pushViewController:list_obj animated:YES];
    [UIView commitAnimations];
}

但这并没有给出从上到下的动画

我想实现导航 推 := 顶部 - 底部 Pop : = 底部 - 顶部

请帮帮我 谢谢

最佳答案

你可以像下面这样从上到下推送一个 View Controller :

objective-C :

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

使用下面的代码从底部到顶部弹出 View Controller :

- (void) popVC {
    CATransition *transition = [CATransition animation];
    transition.duration = 0.5;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionFade;
    transition.subtype = kCATransitionFromBottom;
    [self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
    [self.navigationController popViewControllerAnimated:NO];
}

swift 3:

  func open() {
    let settingsVC = SettingsVC()
    let transition = CATransition()
    transition.duration = 0.5
    transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    transition.type = kCATransitionPush
    transition.subtype = kCATransitionFromTop
    navigationController?.view.layer.add(transition, forKey: kCATransition)
    navigationController?.pushViewController(settingsVC, animated: false)
  }

  func close() {
    let transition = CATransition()
    transition.duration = 0.5
    transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    transition.type = kCATransitionFade
    transition.subtype = kCATransitionFromBottom
    navigationController?.view.layer.add(transition, forKey:kCATransition)
    let _ = navigationController?.popViewController(animated: false)
  }

关于ios - 将 uiviewcontroller 推送到另一个带有动画的 viewcontroller 从顶部 - 底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36620532/

相关文章:

javascript - 图片页面过渡

ios - ios应用程序中的多步表单进度

image - 使用 CSS3 在屏幕上移动图像

ios - 使用 Restkit 将整数作为 json 发送

ios - Swift- 将索引路径数组转换为 Int 数组

ios - 如何获取文件大小以了解是否下载?

android - 三态连续动画(MotionLayout)

ios - PresentView 和 UIAnimation View 冲突?

ios - 在 iOS 中管理动画

ios - 如何将 "Write a Review"/"Rate Us"功能添加到我的应用程序?