`
wangbing1015
  • 浏览: 2876 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于transitionFromViewController方法调用时需注意的问题

阅读更多
UIViewController 中的 willMoveToParentViewController和didMoveToParentViewController的使用
我的益达 我的益达 2014-01-13 19:04:13
关于这两个方法,也是IOS5之后才加上去的。

在iOS 5.0及以后,iOS为UIViewController类添加了新的属性和方法:
@property(nonatomic,readonly) NSArray *childViewControllers -
(void)addChildViewController:(UIViewController *)childController -
(void)removeFromParentViewController -
(void)transitionFromViewController:::::: -
(void)willMoveToParentViewController:(UIViewController *)parent -
(void)didMoveToParentViewController:(UIViewController *)parent
这样,就能够将一个页面中的UIViewController控制起来,而不是混乱的共用一个UIViewController,最重要的是,编程习惯的革命:降低了功能的耦合度!

这里看看这几个方法的使用:

一、[父视图控制器 addChildViewController:子视图控制器];

在此,图控制器A添加了另一个图控制器B,那么A充当父视图控制器,B充当子视图控制器。父视图控制器充当了视图控制器容器的角色。

1、addChildViewController方法:
- (void)addChildViewController:(UIViewController *)childController
向视图控制器容器中添加子视图控制器

childController:子视图控制器

当要添加的子视图控制器已经包含在视图控制器容器中,那么,相当于先从父视图控制器中删除,然后重新添加到父视图控制器中。

2、removeFromParentViewController 方法
- (void)removeFromParentViewController
从父视图控制器中删除。

3、transitionFromViewController 方法
- (void)transitionFromViewController:(UIViewController
                                      *)fromViewController toViewController:(UIViewController
                                                                             *)toViewController duration:(NSTimeInterval)duration
                             options:(UIViewAnimationOptions)options animations:(void
                                                                                 (^)(void))animations completion:(void (^)(BOOL finished))completion
交换两个子视图控制器的位置(由于添加的顺序不同,所以子试图控制器在父视图控制器中存在层次关系)

fromViewController:当前显示的子试图控制器,将被替换为非显示状态

toViewController:将要显示的子视图控制器

duration:交换动画持续的时间,单位秒

options:动画的方式

animations:动画Block

completion:完成后执行的Block

4、willMoveToParentViewController 方法
- (void)willMoveToParentViewController:(UIViewController *)parent
当一个视图控制器从视图控制器容器中被添加或者被删除之前,该方法被调用parent:父视图控制器,如果没有父视图控制器,将为nil

注意点:

-
当我们向我们的视图控制器容器中调用removeFromParentViewController方法时,必须要先调用该方法,且parent参数为nil:

[将要删除的视图控制器 willMoveToParentViewController:nil];

- 当我们调用addChildViewController方法时,在添加子视图控制器之前将自动调用该方法。所以,就不需要我们显示调用了。

5、didMoveToParentViewController 方法
- (void)didMoveToParentViewController:(UIViewController *)parent
当从一个视图控制容器中添加或者移除viewController后,该方法被调用。

parent:父视图控制器,如果没有父视图控制器,将为nil

当我们向我们的视图控制器容器(就是父视图控制器,它调用addChildViewController方法加入子视图控制器,它就成为了视图控制器的容器)中添加(或者删除)子视图控制器后,必须调用该方法,告诉iOS,已经完成添加(或删除)子控制器的操作。

removeFromParentViewController 方法会自动调用了该方法,所以,删除子控制器后,不需要在显示的调用该方法了。

其实,这几个方法中的API说明,看的还懂。

二、关于willMoveToParentViewController方法和didMoveToParentViewController方法的使用

1.这两个方法用在子试图控制器交换的时候调用!即调用transitionFromViewController 方法时,调用。

2.当调用willMoveToParentViewController方法或didMoveToParentViewController方法时,要注意他们的参数使用:

当某个子视图控制器将从父视图控制器中删除时,parent参数为nil。

即:[将被删除的子试图控制器 willMoveToParentViewController:nil];

当某个子试图控制器将加入到父视图控制器时,parent参数为父视图控制器。

即:[将被加入的子视图控制器 didMoveToParentViewController:父视图控制器];

3.无需调用[子视图控制器 willMoveToParentViewController:父视图控制器]方法。因为我们调用[父视图控制器
                                                              addChildViewController:子视图控制器]时,已经默认调用了。

只需要在transitionFromViewController方法后,调用[子视图控制器didMoveToParentViewController:父视图控制器];

4.无需调用[子视图控制器 didMoveToParentViewController:父视图控制器]方法。因为我们调用

[子视图控制器 removeFromParentViewController]时,已经默认调用了。

只需要在transitionFromViewController方法之前调用:[子视图控制器
                                        willMoveToParentViewController:nil]。

经过这几点说明,在一些视图切换的过程中,和视图的换位中,应该可以了解什么时候去调用对应的视图啦。
分享到:
评论

相关推荐

    addChildViewController transitionFromViewController nib storyboard

    当你需要在一个视图控制器(parent view controller)中添加另一个视图控制器(child view controller)时,你会用到这个方法。通过添加子视图控制器,你可以创建复杂、层次化的视图结构,同时保持代码的清晰和模块...

    UIViewcontoller的新方法测试_demo

    这样可以更优雅地处理视图控制器间的嵌套关系,同时确保了生命周期方法(如`viewDidLoad`、`viewWillAppear:`等)的正确调用。 其次,`transitionFromViewController:toViewController:duration:options:animations...

    TabBarController标签.rar

    这可以通过调整`viewControllers`数组并调用`setViewControllers:animated:`实现,但需要注意动画同步问题,确保用户体验流畅。 6. **自定义过渡动画**:如果你想要为不同标签间的切换添加特殊动画效果,可以通过...

    隐式切换主控制器代码

    在HQTool.framework中,可能已经封装了上述的一种或多种方法,提供了简便的API供开发者调用。例如,它可能有一个名为`switchMainControllerWithNewClass:`的方法,只需要传入新的控制器类名,就能自动处理切换过程。...

    IOS切换视图动画

    5. **transitionFromViewController:toViewController:duration:options:animation:completion:**: 这个方法允许在两个视图控制器之间创建自定义动画过渡。你可以指定动画的持续时间、选项以及动画块来实现定制效果...

    ios-TabBar动画.zip

    利用UIViewController的`transitionFromViewController:toViewController:duration:options:animationCompletion:`方法,可以在两个视图控制器之间插入自定义动画。这可以实现平移、旋转、缩放等各种效果。 3. 使用...

    UITabBarController

    如果需要自定义动画,可以重写`UITabBarController`的`transitionFromViewController:toViewController:duration:options:animationCompletion:`方法。 6. **子控制器的顺序**: `viewControllers`属性是一个数组,...

    ios-照片选择器转场动画.zip

    8. **性能优化**: 在实现转场动画时,要注意性能问题,避免大量图片加载导致卡顿。可以使用懒加载策略,或者对图片进行预处理和缓存。 9. **响应式设计**: 为了适应不同设备和屏幕尺寸,转场动画应该具有良好的响应...

    IOS实战之自定义转场动画详解

    首先,传统的基于闭包的转场动画实现通常使用`transitionFromViewController:`方法,虽然这个方法已过时,但理解其工作原理对于后续的学习至关重要。此方法接收两个视图控制器(fromView和toView)作为参数,并通过...

    IOS应用源码Demo-图层的滑动切换-毕设学习.zip

    5. **性能优化**:在处理大量图层或者复杂动画时,要注意性能优化。避免不必要的图层更新,及时清理不再使用的图层,合理利用Core Animation的硬件加速能力,可以使应用运行更加流畅。 6. **代码组织与设计模式**:...

    TabBar自定义Demo

    当进行自定义时,需要考虑不同iOS版本的兼容性问题。某些API可能在旧版本中不存在,需要使用条件编译指令或适配层进行处理。 在`TabBarDemo`这个项目中,开发者可能已经实现了上述部分或全部功能,通过运行和研究...

    ContainerViewController

    4. **transitionFromViewController:toViewController:duration:options:animations:completion:** 和 **performSegueWithIdentifier:sender:** 这两个方法提供了平滑过渡的效果,可以在切换子视图控制器时进行动画...

    swift-四个自定义转场动画的demo

    在Swift开发中,自定义转场动画是一种提升用户体验的有效手段,它可以让你的应用程序在界面切换时展现出独特的视觉效果。这个“swift-四个自定义转场动画的demo”提供了四个不同的转场动画示例,帮助开发者深入理解...

    Autolayout-budejie

    Autolayout 实现百思不得姐总结##精华模块切换子控制器,使用系统的切换方法实现把全部\视频\声音\图片\段子五个topic控制器添加为EssenceVc的子控制器,通过以下方法切换- (void)transitionFromViewController:...

    IOS应用源码——SFContainerViewController for iOS.rar

    这通常涉及到 `-addChildViewController:`、`-removeChildViewController:` 和 `-transitionFromViewController:toViewController:duration:options:animation:completion:` 等方法的使用。 2. **视图管理**:源码...

    iOS常用视图切换动画

    `UIViewController`的`transitionFromViewController(to:duration:options:animation:completion:)`和`present(_:animated:completion:)`方法用于控制器间的切换。前者用于在容器控制器中进行子控制器的切换,后者...

    GAHomeDemo.zip

    - (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)...

    支持全屏浏览图片的效果

    3. **视图控制器的转场动画**:在iOS中,我们可以利用UIViewController的transitionFromViewController:toViewController:duration:options:animations:completion:方法来实现平滑的视图切换。全屏效果通常伴随着一...

    IOS各种动画

    UIViewController的transitionFromViewController和presentViewController方法都支持自定义转场动画。你可以实现UIViewControllerAnimatedTransitioning协议来自定义转场动画的行为,或者使用预定义的转场类型,如...

    iOS开发中的ViewController转场切换效果实现简介

    在iOS开发中,ViewController的转场切换是用户体验的重要组成部分...在设计和实现这些动画时,需要注意保持性能优化,避免过度复杂的动画导致应用卡顿,同时也要确保动画与应用的整体设计风格一致,增强品牌的识别度。

Global site tag (gtag.js) - Google Analytics