¡¾Ò»¡¿ÈÏʶ²»È«µÄ±Ê¼Ç
ÉèÖÃ [childVC beginAppearanceTransition:YES animated:YES] ¼´¿É
ÒƳýµÄʱºòÒªÕâÑù :
[childController beginAppearanceTransition:NO animated:YES]; [childController.view removeFromSuperview]; [childController endAppearanceTransition]; viewWillDisappearºÍviewDidDisappear²Å»á±»µ÷ÓÃ
²Î¼û: http://www.jianshu.com/p/7587cce3ede0
http://blog.csdn.net/jlstmacblog/article/details/52414301
¡¾¶þ¡¿ÈÏʶ²¹È«
Ïêϸ²Î¿¼ÈçÏÂ:
addChildViewController Óë addSubview µ÷ÓÃ˳Ðò
Container View Controller
iOS ʵ¼Ê¿ª·¢ÖÐ,ΪÁË·½±ã¹ÜÀíÊÓͼ,ÎÒÃǾ³£»á°ÑÒ»¸ö VC (ViewController) ×÷ΪÈÝÆ÷ VC,ÆäËû×ÓÊÓͼµÄ VC ×÷ΪÈÝÆ÷ VC µÄ×Ó VC¡£Í¬Ê± view Ò²×÷ΪÈÝÆ÷ View µÄ×Ó view (subview)¡£Æ»¹û¹Ù·½Îĵµ³ÆΪ Container View Controller¡£ÐèҪעÒâµÄÊÇ,ÔÚµ÷Óà addChildViewController ºÍ addSubview ʱÐèҪעÒâµ÷ÓÃ˳Ðò,¹Ù·½Îĵµ½¨Òé:
1¡¢Ìí¼Ó×ÓÊÓͼµÄʱºò,´úÂëµ÷ÓÃ˳Ðò:
- (void) displayContentController: (UIViewController*) content {
[self addChildViewController:content];
content.view.frame = [self frameForContentController];
[self.view addSubview:self.currentClientView];
[content didMoveToParentViewController:self];
}
ÐèҪעÒâµÄÊÇ,Ìí¼ÓµÄʱºò,²»ÐèÒªÏÔʽµÄµ÷ÓÃ:willMoveToParentViewController,ÒòΪ addChildViewController »á°ïÄãµ÷Óø÷½·¨¡£
2¡¢ÒƳý×ÓÊÓͼµÄʱºò,´úÂëµ÷ÓÃ˳Ðò:
- (void) hideContentController: (UIViewController*) content {
[content willMoveToParentViewController:nil];
[content.view removeFromSuperview];
[content removeFromParentViewController];
}
ÓëÌí¼ÓµÄʱºòÏà·´,ÕâÀï²»ÐèÒªÏÔʾµÄµ÷Óà didMoveToParentViewController,removeFromParentViewController ÄÚ²¿»áµ÷Óà didMoveToParentViewController ,²¢ÇÒ°Ñ´«Èë nil ²ÎÊý¡£
addChildViewController µÄÖØÒªÐÔ
ÔÚÏò container view controller ÖÐÌí¼Ó subview µÄʱºò,ÍùÍù»áͬʱÌí¼Ó×Ó vc ¹Øϵ¡£³ýÁ˱£Ö¤ÏìÓ¦Á´µÄÕý³£´«µÝÍâ,×Ó vc µÄÊÓͼÉúÃüÖÜÆÚº¯ÊýÒ²»á¸úË游 vc ±»´¥·¢¡£ÀýÈçÎÒÃÇÔÚ viewDidLoad º¯ÊýÖÐÌí¼ÓÁË×Ó vc ºÍ×Ó view:
- (void)viewDidLoad {
[super viewDidLoad];
TTViewController *ttvc = [TTViewController new];
[self addChildViewController:ttvc];
[self.view addSubview:ttvc.view];
[ttvc didMoveToParentViewController:self];
}
ËäÈ»ÔÚ viewDidLoad ÖÐÌí¼ÓÁË×Ó view (´ËʱÈÝÆ÷ÊÓͼµÄ viewwillAppear ºÍ viewDidAppear ¶¼Ã»Óб»´¥·¢),µ«ÊÇËæºóÈÝÆ÷ vc µÄÉúÃüÖÜÆÚ·½·¨(viewWillAppear)±»´¥·¢µÄʱºò,ÈÝÆ÷ vc »áͬʱ±éÀú×Ô¼ºµÄ childVC À´Í¬²½ childVC µÄÊÓͼÉúÃüÖÜÆÚ·½·¨,ÕâÒ»µã¿ÉÒÔͨ¹ý¹Û²ìµ÷ÓÃÕ»¿´µ½:

(viewWillAppear ·½·¨µÄµ÷ÓÃÕ»ÀàËÆÉÏͼ ) ËùÒÔ addChildViewController ºó,ÉÏͼµÄ [__NSSingleObjectArrayI enumerateObjectsWithOptions:usingBlock:] ²ÅÄܲúÉúÓÐЧµ÷Óá£
ͨ¹ýÉϱߵĵ÷ÓÃÕ»,´ó¸ÅÄÜ¿´³ö,ÊÓͼµÄ viewDidAppear µÄµ÷ÓÃ,µ×²ãÊÇÀ´×Ô GraphicsServices ¿âµÄ GSEventRunModal µÄµ÷ÓÃ,GSEventRunModal µÄµ÷Óô¥·¢ Runloop »Øµ÷,À´Í¨ÖªÊÓͼ´¦ÀíÉúÃüÖÜÆÚ¡£ËùÒÔÀíÂÛÉÏ viewWillAppear ºÍ viewDidAppear µÄµ÷Óö¼ÊÇÔÚ²»Í¬µÄ Runloop ÉϽøÐеġ£
viewDidAppear Á½´Îµ÷Óó¡¾°
ʵ¼Ê¿ª·¢ÖÐ,µ±ÎÒÃÇͨ¹ý addChildViewController Óë addSubview À´Ìí¼Ó×ÓÊÓͼµÄʱºò,´æÔÚ viewDidAppear Á½´Î±»µ÷ÓõÄÇé¿ö¡£
²úÉúÁ½´Î viewDidAppear µ÷ÓõÄÔÒò,Ò»´ÎÊÇÀ´×Ô addChildViewController ºó,ÊÓͼ¸úËæÈÝÆ÷ÊÓͼµÄÉúÃüÖÜÆÚ·½·¨±»µ÷ÓÃ,ÁíÒ»´Î´¥·¢ÊÇÀ´×Ô addSubview µÄµ÷ÓÃ,²¢ÇÒʱ»úÊǼäÓÚÈÝÆ÷ÊÓͼµÄ viewWillAppear ºÍ viewDidAppear Ö®¼ä¡£
ͬʱ´úÂë˳ÐòÊÇÏȵ÷Óà addSubview ºóµ÷Óà addChildViewController (²Â²â addSubview ÄÚ²¿×öÁËÊÇ·ñ´¥·¢ viewWillAppear¡µÈ·½·¨µÄÅжÏ)¡£
ËùÒÔÏÂÁдúÂë»ù±¾É϶¼»á´¥·¢×Ó vc µÄ viewDidAppear Á½´Îµ÷ÓÃ:
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_async(dispatch_get_main_queue(), ^{
[self addSubViewController];
});
[self performSelectorOnMainThread:@selector(addSubViewController) withObject:nil waitUntilDone:NO];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.26 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self addSubViewController];
});
}
- (void)addSubViewController {
TTViewController *ttvc = [TTViewController new];
[self.view addSubview:ttvc.view];
[self addChildViewController:ttvc];
[ttvc didMoveToParentViewController:self];
}
ÉÏÊö´úÂë¾¹ý²âÊÔ,¶¼»á´¥·¢ viewDidAppear µÄÁ½´Îµ÷ÓÃ,ÆäÖеÚÒ»´ÎÊÇ addSubview ´¥·¢µÄ (ÔÚÈÝÆ÷ÊÓͼµÄ viewDidAppear Ç°µ÷ÓÃ),µÚ¶þ´ÎÊÇÈÝÆ÷ÊÓͼµÄ viewDidAppear ´¥·¢Í¬²½¸øÁË childVC ´¥·¢µÄ (ÉϱßÒѾ·ÖÎö¹ý)¡£
ʵ¼Ê¿ª·¢ÖÐ,³¡¾°¸ü¶àµÄ¿ÉÄÜÊÇÍøÂçÇëÇó»Øµ÷µÄʱ¼ä¸ÕºÃÊÇ 0.1~0.4 s Ö®¼ä¡£¶ø´Ëʱ¸ÕºÃÖ´ÐÐÁË addSubview ²Ù×÷¡£
Òª½â¾ö viewDidAppear Õý³£µÄ±»µ÷ÓÃÒ»´Î,Ö»ÐèÒª¸Ä±äµ÷ÓÃ˳Ðò,¼´ÎÄÕ¿ªÍ·½¨ÒéµÄÏÈ addChildViewController ºóµ÷Óà addSubvew¡£
addSubview Óë viewWillAppear / viewDidAppear
ΪÁËÑо¿ addSubview µÄÄÚ²¿Âß¼,ÎÒÃÇÏÈÅ׿ª addChildViewController ·½·¨²»Ì¸¡£¿ÉÒԶ϶¨µÄÊÇ,addSubview ·½·¨ÄÚ²¿Ò»¶¨×öÁËÊÇ·ñ´¥·¢´¥·¢ viewWillAppear µÄÅжϡ£À´¿´ÏÂÁдúÂë:
- (void)viewDidLoad {
[super viewDidLoad];
TTViewController *ttvc = [TTViewController new];
[self.view addSubview:ttvc.view];
}
ÉÏÃæ´úÂë²»»á´¥·¢×ÓÊÓͼµÄÉúÃüÖÜÆÚ·½·¨,ÔÒòÊÇ´Ëʱ¸¸ÊÓͼ (self.view) ûÓб»äÖȾµ½ÆÁÄ»ÉÏ,ËùÒÔ×ÓÊÓͼҲ²»»áÁ¢¿ÌÏÔʾ,addSubview Ò²Ö»ÄÜ·ÅÆúÊÓͼµÄÉúÃüÖÜÆÚ·½·¨µ÷Óá£Í¬ÑùµÄ,ÔÚ viewWillAppear Öе÷ÓÃ,»áµÃµ½ÏàͬµÄ½á¹û¡£
ÔÚ viewDidAppear ÊÓͼ addSubview :
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
TTViewController *ttvc = [TTViewController new];
[self.view addSubview:ttvc.view];
}
´Ëʱ,×ÓÊÓͼ viewWillAppear / viewDidAppear ¶¼»á±»Õý³£µ÷ÓÃ, viewWillAppear ¶Ïµãµ÷ÓÃÕ»ÈçÏÂ:

¿ÉÒÔ¿´µ½ addSubview ÄÚ²¿»áµ÷Óà vc µÄviewWillMoveToWindow ,´Ó¶øÁ¢¿Ì´¥·¢ viewWillAppear ·½·¨¡£
ÔÚ¿´ viewDidAppear µ÷ÓÃÕ»:  ¿ÉÒÔ¿´µ½ UIViewController _executeAfterAppearanceBlock µ÷Óúó,µ÷ÓÃÁË vc µÄÄÚ²¿·½·¨ viewDidMoveToWindow... ,È»ºó´¥·¢ viewDidAppear¡£µ×²ãÊÇÒ»¸ö observer µÄ runloop »Øµ÷,ËùÒÔÖ»Äܲ²â,addSubview ·½·¨×¢²áÁË observer µÄ runloop ʼþ,µÈ´ý Core Animation ÊÓͼäÖȾÍê³É¡£
ËùÒÔÀíÂÛÉÏ,Èç¹ûÎÒÃÇÔÚ¸¸ÊÓͼÉúÃüÖÜÆÚÖ´ÐÐÍê³Éºó(viewDidAppear Ö®ºó) addSubview ,ÄÇô addSubview »á×Ô¼º´¦ÀíÉúÃüÖÜÆÚ·½·¨,µ«ÊǾ¡¹ÜÈç´Ë,ÎÒÃÇ»¹ÊÇÒªÔÚµ÷Óà addSubview Ç°¼ÓÉÏ addChildViewController µ÷ÓÃ,À´±£Ö¤ÊÓͼµÄÆäËû´¦ÀíÕý³£(ÀýÈç viewWillDisAppear µÈ¸úË游 vc µÄ´¥·¢)¡£
ͨ¹ý·ÖÎöÎÒÃÇÒ²´ó¸ÅÄÜ·ÖÎö³ö addSubview ´¦ÀíµÄÂß¼:
-
addSubview µÄʱºò,¸¸ÊÓͼµÄÉúÃüÖÜÆÚº¯Êý»¹Ã»Óд¥·¢,ÄÇô´Ëʱ×Ô¼º¿Ï¶¨²»Äܱ»ÏÔʾÔÚ window ÉÏ,ËùÒÔ²»´¦ÀíÈκÎÊÓͼÖÜÆÚº¯Êý;´ËʱÊÓͼÉúÃüÖÜÆÚº¯ÊýµÄÕý³£´¥·¢,¾ÍÈ«¿¿ addChildViewController À´Î¬³ÖÁË¡£ -
addSubview µÄʱºò,¸¸ÊÓͼµÄÉúÃüÖÜÆÚº¯ÊýÒѾִÐÐÍê³É(viewDidAppear ÒѾִÐÐÍê),×Ô¼º¿ÉÒÔÁ¢¿ÌÏÔʾµ½ window ÉÏ,´Ëʱ addSubview ÄÚ²¿»áÁ¢¿Ì´¥·¢ viewWillAppear,ͬʱע²á source0 µÄ runloop ʼþ,µÈ´ý GraphicsServices µÄÊÓͼäÖȾÍê³ÉµÄ»Øµ÷,´¥·¢ viewDidAppear¡£ -
addSubview µÄʱºò,¸¸ÊÓͼµÄÉúÃüÖÜÆÚº¯Êý¼äÓÚ viewWillAppear ºÍ viewDidAppear Ö®¼ä,´ËʱÁ¢¿Ì´¥·¢ viewWillAppear ,viewDidAppear Ôò²»Óô¦Àí,¸úË游 vc µÄµ÷Óô¥·¢,ËùÒÔÏȵ÷Óà addChildViewController µÄÖØÒªÐÔ¾ÍÔÚÕâÀï¡£
ÊÖ¶¯¿ØÖÆ×ÓÊÓͼÉúÃüÖÜÆÚ
Èç¹ûÏë×Ô¼ºÊÖ¶¯Í¨¹ý´úÂëÑϸñ¿ØÖÆÊÓͼÉúÃüÖÜÆÚ,¿ÉÒÔͨ¹ý:
- (BOOL) shouldAutomaticallyForwardAppearanceMethods {
return NO;
}
À´ÏÞÖÆÊÓͼÉúÃüÖÜÆÚ·½·¨µÄ×Ô¶¯´¥·¢,µ«Í¬Ê±Òª×Ô¼º¹ÜÀíÉúÃüÖÜÆÚ:
-(void) viewWillAppear:(BOOL)animated {
[self.child beginAppearanceTransition: YES animated: animated];
}
-(void) viewDidAppear:(BOOL)animated {
[self.child endAppearanceTransition];
}
-(void) viewWillDisappear:(BOOL)animated {
[self.child beginAppearanceTransition: NO animated: animated];
}
-(void) viewDidDisappear:(BOOL)animated {
[self.child endAppearanceTransition];
}
²Î¿¼Îĵµ
https://www.xiaobotalk.com/2019/05/addsubview/ 1¡¢Æ»¹û¿ª·¢Îĵµ addchildviewcontroller 2¡¢Æ»¹û¿ª·¢Îĵµ beginappearancetransition 3¡¢Æ»¹û¿ª·¢Îĵµ ImplementingaContainerViewController
¡¾Èý¡¿ÈÏʶ¼ÓÉî
addChildViewController¨C¿ØÖÆÆ÷°ü¿ØÖÆÆ÷½âñî
1.Ïà¹ØÊôÐԺͷ½·¨
@property(nonatomic,readonly) NSArray *childViewControllers
- (void)addChildViewController:(UIViewController *)childController;
- (void)removeFromParentViewController;
- (void)transitionFromViewController::::::;
- (void)willMoveToParentViewController:(UIViewController *)parent
- (void)didMoveToParentViewController:(UIViewController *)parent
2.¹ØÓÚwillMoveToParentViewController·½·¨ºÍdidMoveToParentViewController·½·¨µÄʹÓÃ
ÕâÁ½¸ö·½·¨ÓÃÔÚ×ÓÊÔͼ¿ØÖÆÆ÷½»»»µÄʱºòµ÷ÓÃ!¼´µ÷ÓÃtransitionFromViewController ·½·¨Ê±,µ÷Óá£
µ±µ÷ÓÃwillMoveToParentViewController·½·¨»òdidMoveToParentViewController·½·¨Ê±,ҪעÒâËûÃǵIJÎÊýʹÓÃ:
µ±Ä³¸ö×ÓÊÓͼ¿ØÖÆÆ÷½«´Ó¸¸ÊÓͼ¿ØÖÆÆ÷ÖÐɾ³ýʱ,parent²ÎÊýΪnil¡£ ¼´:[½«±»É¾³ýµÄ×ÓÊÔͼ¿ØÖÆÆ÷ willMoveToParentViewController:nil]; µ±Ä³¸ö×ÓÊÔͼ¿ØÖÆÆ÷½«¼ÓÈëµ½¸¸ÊÓͼ¿ØÖÆÆ÷ʱ,parent²ÎÊýΪ¸¸ÊÓͼ¿ØÖÆÆ÷¡£ ¼´:[½«±»¼ÓÈëµÄ×ÓÊÓͼ¿ØÖÆÆ÷ didMoveToParentViewController:¸¸ÊÓͼ¿ØÖÆÆ÷];
3.ÎÞÐèµ÷ÓÃ[childVc willMoveToParentViewController:parent]·½·¨¡£
ÒòΪÎÒÃǵ÷ÓÃ[parent addChildViewController:childVc]ʱ,ÒѾĬÈϵ÷ÓÃÁË¡£ Ö»ÐèÒªÔÚtransitionFromViewController·½·¨ºó,µ÷ÓÃ[×ÓÊÓͼ¿ØÖÆÆ÷didMoveToParentViewController:¸¸ÊÓͼ¿ØÖÆÆ÷];
4.ÎÞÐèµ÷ÓÃ[childVc didMoveToParentViewController:parent]·½·¨¡£
ÒòΪÎÒÃǵ÷ÓÃ[childVc removeFromParentViewController]ʱ,ÒѾĬÈϵ÷ÓÃÁË¡£ Ö»ÐèÒªÔÚtransitionFromViewController·½·¨Ö®Ç°µ÷ÓÃ:[childVc willMoveToParentViewController:nil]¡£
5.·¶Àý
FirstViewController *firstViewController=[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
[self addChildViewController:firstViewController];
SecondViewController *secondViewController=[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self addChildViewController:secondViewController];
ThirdViewController *thirdViewController=[[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
[self addChildViewController:thirdViewController];
thirdViewController.view.frame = self.view.bounds;
[self.view addSubview:thirdViewController.view];
[thirdViewController didMoveToParentViewController:self];
currentViewController=thirdViewController;
[self transitionFromViewController:currentViewController toViewController:firstViewController duration:4 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
} completion:^(BOOL finished) {
}];
currentViewController=firstViewController;
[currentViewController willMoveToParentViewController:nil];
[currentViewController.view removeFromSuperview];
[currentViewController removeFromParentViewController];
ÏÈ addChildViewController ºóµ÷Óà addSubview,ʹ×Ó¿ØÖÆÆ÷µÄviewDidAppear Ö»±»µ÷ÓÃÒ»´Î
Èç¹ûÏȵ÷Óà addSubview ºóµ÷Óà addChildViewController,»á²úÉúÁ½´Î×Ó¿ØÖÆÆ÷ viewDidAppear µÄµ÷ÓÃ
Ò»´ÎÊÇÀ´×Ô addChildViewController ºó,ÊÓͼ¸úËæÈÝÆ÷ÊÓͼµÄÉúÃüÖÜÆÚ·½·¨±»µ÷ÓÃ,ÁíÒ»´Î´¥·¢ÊÇÀ´×Ô addSubview µÄµ÷ÓÃ,²¢ÇÒʱ»úÊǼäÓÚÈÝÆ÷ÊÓͼµÄ viewWillAppear ºÍ viewDidAppear Ö®¼ä¡£ (²Â²â addSubview ÄÚ²¿×öÁËÊÇ·ñ´¥·¢ viewWillAppear¡µÈ·½·¨µÄÅжÏ)¡£ [²Î¿¼À´Ô´: addChildViewController Óë addSubview µ÷ÓÃ˳Ðò] (https://www.xiaobotalk.com/archives/470)
6.Ó¦ÓÃʵÀý
¸ù¾Ý±êÇ©Çл»Ò³ÃæÓ¦ÓÃʵÀýÁ´½Ó:https://www.jianshu.com/p/913648c9957c
²Î¿¼:https://juejin.cn/post/6844903894972104718#heading-5
transitionFromViewController:toViewController:duration:options:animations:completion: ¹Ù·½Îĵµ ÈçÏÂ
Summary
Transitions between two of the view controller's child view controllers.
Declaration
- (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;
Discussion
This method adds the second view controller's view to the view hierarchy and then performs the animations defined in your animations block. After the animation completes, it removes the first view controller's view from the view hierarchy.
This method is only intended to be called by an implementation of a custom container view controller. If you override this method, you must call super in your implementation.
Parameters
/*
Òë:Õâ¸ö·½·¨»áÌí¼ÓµÚ¶þ¸övcµÄviewµ½ÊÓͼ²ã¼¶ÖÐ,È»ºóÖ´ÐÐÔÚ¶¯»blockÖж¨ÒåµÄ¶¯»¡£´ý¶¯»Íê³É,Ëü´ÓÊÓͼ²ã¼¶ÖÐÒƳýµÚÒ»¸övcµÄview¡£
Õâ¸ö·½·¨Ä¿µÄÖ»ÔÚÓÚ±»Ò»¸ö×Ô¶¨ÒåµÄÈÝÆ÷¿ØÖÆÆ÷µÄʵÏÖÀ´µ÷Óá£Èç¹ûÄãÖØдÁËÕâ¸ö·½·¨,Äã±ØÐëµ÷Óø¸ÊµÏÖ¡£
*/
fromViewController
A view controller whose view is currently visible in the parent'€?s view hierarchy.
toViewController
A child view controller whose view is not currently in the view hierarchy.
duration
The total duration of the animations, in seconds. If you pass zero, the changes are made without animating them.
options
A mask of options indicating how you want to perform the animations. For a list of valid constants, see UIViewAnimationOptions.
animations
A block object containing the changes to commit to the views. Here you programmatically change any animatable properties of the views in your view hierarchy. This block takes no parameters and has no return value. This parameter must not be NULL.
completion
A block to be called when the animation completes.
The block takes the following parameters:
finished
YES if the animation finished; NO if it was skipped.
Open in Developer Documentation
²Î¿¼: https://www.cnblogs.com/weicyNo-1/p/7299142.html 
ÌÆÇÉÇ°±²Ö®Ç°µÄһЩ¼Ç¼:
ÔÀ´µÄÎÊÌâ
ÕâЩÐÂÔöµÄ·½·¨ºÍÊôÐÔÓÃÓڸĽøÎÒÃǵıà³Ì·½Ê½¡£ÄÇôÈÃÎÒÃÇÏÈ¿´¿´ÒÔÇ°µÄ¶ÔÓÚ UIViewControllerµÄʹÓÃÓÐʲôDZÔÚµÄÎÊÌâ,ÈÏÇåÎÊÌâ,ÎÒÃDzÅÄÜÀí½âÆ»¹û¸Ä±äµÄÒâÒå¡£
ÔÚÒÔÇ°,Ò»¸ö UIViewController µÄ View ¿ÉÄÜÓкܶàСµÄ×Ó view¡£ÕâЩ×Ó view ºÜ¶àʱºò±»¸ÇÔÚ×îºó,ÎÒÃÇÔÚ×îÍâ²ãViewController µÄ viewDidLoad ·½·¨ÖÐ,Óà addSubview Ôö¼ÓÁË´óÁ¿µÄ×Ó view¡£ÕâЩ×Ó view´ó¶àÊý²»»áÒ»Ö±´¦ÓÚ½çÃæÉÏ,Ö»ÊÇÔÚijЩÇé¿öϲŻá³öÏÖ,ÀýÈçµÇ½ʧ°ÜµÄÌáʾ view,ÉÏ´«¸½¼þ³É¹¦µÄÌáʾ view,ÍøÂçʧ°ÜµÄÌáʾ viewµÈ¡£µ«ÊÇËäÈ»ÕâЩ view ºÜÉÙ³öÏÖ,µ«ÊÇÎÒÃÇÈ´³£³£Ò»Ö±°ÑËüÃÇ·ÅÔÚÄÚ´æÖС£ÁíÍâ,µ±ÊÕµ½Äڴ澯¸æʱ,ÎÒÃÇÖ»ÄÜ×Ô¼ºÊÖ¹¤°ÑÕâЩ view ´Ósuper view ÖÐÈ¥µô¡£
¸Ä±ä
Æ»¹ûÐ嵀 API Ôö¼ÓÁË addChildViewController ·½·¨,²¢ÇÒÏ£ÍûÎÒÃÇÔÚʹÓà addSubview ʱ,ͬʱµ÷ÓÃ[self addChildViewController:child] ·½·¨½« sub view ¶ÔÓ¦µÄ viewControllerÒ²¼Óµ½µ±Ç° ViewController µÄ¹ÜÀíÖС£¶ÔÓÚÄÇЩµ±Ç°ÔÝʱ²»ÐèÒªÏÔʾµÄ subview,ֻͨ¹ýaddChildViewController °Ñ subViewController ¼Ó½øÈ¥¡£ÐèÒªÏÔʾʱÔÙµ÷Óà transitionFromViewController:toViewController:duration:options:animations:completion·½·¨¡£ ÁíÍâ,µ±ÊÕµ½ÏµÍ³µÄ Memory Warning µÄʱºò,ϵͳҲ»á×Ô¶¯°Ñµ±Ç°Ã»ÓÐÏÔʾµÄ subview unload µô,ÒÔ½ÚÊ¡ÄÚ´æ¡£
²Î¿¼:https://blog.devtang.com/2012/02/06/new-methods-in-uiviewcontroller-of-ios5/
|