ITÊýÂë ¹ºÎï ÍøÖ· Í·Ìõ Èí¼þ ÈÕÀú ÔĶÁ ͼÊé¹Ý
TxTС˵ÔĶÁÆ÷
¡ýÓïÒôÔĶÁ,С˵ÏÂÔØ,¹ÅµäÎÄѧ¡ý
ͼƬÅúÁ¿ÏÂÔØÆ÷
¡ýÅúÁ¿ÏÂÔØͼƬ,ÃÀŮͼ¿â¡ý
ͼƬ×Ô¶¯²¥·ÅÆ÷
¡ýͼƬ×Ô¶¯²¥·ÅÆ÷¡ý
Ò»¼üÇå³ýÀ¬»ø
¡ýÇáÇáÒ»µã,Çå³ýϵͳÀ¬»ø¡ý
¿ª·¢: C++֪ʶ¿â Java֪ʶ¿â JavaScript Python PHP֪ʶ¿â È˹¤ÖÇÄÜ Çø¿éÁ´ ´óÊý¾Ý Òƶ¯¿ª·¢ ǶÈëʽ ¿ª·¢¹¤¾ß Êý¾Ý½á¹¹ÓëËã·¨ ¿ª·¢²âÊÔ ÓÎÏ·¿ª·¢ ÍøÂçЭÒé ϵͳÔËά
½Ì³Ì: HTML½Ì³Ì CSS½Ì³Ì JavaScript½Ì³Ì GoÓïÑÔ½Ì³Ì JQuery½Ì³Ì VUE½Ì³Ì VUE3½Ì³Ì Bootstrap½Ì³Ì SQLÊý¾Ý¿â½Ì³Ì CÓïÑÔ½Ì³Ì C++½Ì³Ì Java½Ì³Ì Python½Ì³Ì Python3½Ì³Ì C#½Ì³Ì
ÊýÂë: µçÄÔ ±Ê¼Ç±¾ ÏÔ¿¨ ÏÔʾÆ÷ ¹Ì̬ӲÅÌ Ó²ÅÌ ¶ú»ú ÊÖ»ú iphone vivo oppo СÃ× »ªÎª µ¥·´ ×°»ú ͼÀ­¶¡
 
   -> Òƶ¯¿ª·¢ -> addChildViewControllerºó Childvc viewWillAppear ²»µ÷ÓõÄÎÊÌâ -> ÕýÎÄÔĶÁ

[Òƶ¯¿ª·¢]addChildViewControllerºó Childvc viewWillAppear ²»µ÷ÓõÄÎÊÌâ

¡¾Ò»¡¿ÈÏʶ²»È«µÄ±Ê¼Ç

ÉèÖÃ
[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 {
    // 1. Ìí¼Ó ×Óvc,µ÷ÓÃ addChildViewController
   [self addChildViewController:content];
    // 2. ÉèÖà ×ÓÊÓͼµÄ frame
   content.view.frame = [self frameForContentController];
    // 3. Ìí¼Ó×ÓÊÓͼ, µ÷Óà addSubview
   [self.view addSubview:self.currentClientView];
    // 4. µ÷ÓÃ didMoveToParentViewController
   [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 µÄÊÓͼÉúÃüÖÜÆÚ·½·¨,ÕâÒ»µã¿ÉÒÔͨ¹ý¹Û²ìµ÷ÓÃÕ»¿´µ½:

viewDidAppear

(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];

    // 1¡¢dispatch µ½Ï´Πrunloop
    dispatch_async(dispatch_get_main_queue(), ^{
        [self addSubViewController];
    });

    // 2¡¢perform µ½ÏÂÒ»´Î runloop 
    [self performSelectorOnMainThread:@selector(addSubViewController) withObject:nil waitUntilDone:NO];

    // 3¡¢ÑÓ³Ù 0.1 ~ 0.4 ÃëÖ®¼äÖ´ÐÐ 
    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];
     // ×¢ÒâÕâÀïÏȵ÷ÓõÄÊÇ addSubview
     [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 ¶Ïµãµ÷ÓÃÕ»ÈçÏÂ:

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 ´¦ÀíµÄÂß¼­:


  1. addSubview µÄʱºò,¸¸ÊÓͼµÄÉúÃüÖÜÆÚº¯Êý»¹Ã»Óд¥·¢,ÄÇô´Ëʱ×Ô¼º¿Ï¶¨²»Äܱ»ÏÔʾÔÚ window ÉÏ,ËùÒÔ²»´¦ÀíÈκÎÊÓͼÖÜÆÚº¯Êý;´ËʱÊÓͼÉúÃüÖÜÆÚº¯ÊýµÄÕý³£´¥·¢,¾ÍÈ«¿¿ addChildViewController À´Î¬³ÖÁË¡£

  2. addSubview µÄʱºò,¸¸ÊÓͼµÄÉúÃüÖÜÆÚº¯ÊýÒѾ­Ö´ÐÐÍê³É(viewDidAppear ÒѾ­Ö´ÐÐÍê),×Ô¼º¿ÉÒÔÁ¢¿ÌÏÔʾµ½ window ÉÏ,´Ëʱ addSubview ÄÚ²¿»áÁ¢¿Ì´¥·¢ viewWillAppear,ͬʱע²á source0 µÄ runloop ʼþ,µÈ´ý GraphicsServices µÄÊÓͼäÖȾÍê³ÉµÄ»Øµ÷,´¥·¢ viewDidAppear¡£

  3. 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.·¶Àý

//ÔÚparent view controller ÖÐÌí¼Ó child view controller
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];

// addChildViewController»áµ÷ÓÃ[child willMoveToParentViewController:self] ,µ«ÊDz»»áµ÷ÓÃdidMoveToParentViewController,ËùÒÔÐèÒªÏÔʾµ÷ÓÃ
[thirdViewController didMoveToParentViewController:self];
currentViewController=thirdViewController;

//Çл»child view controller
[self transitionFromViewController:currentViewController toViewController:firstViewController duration:4 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
            }  completion:^(BOOL finished) {
               //......
            }];
currentViewController=firstViewController;

//ÒƳýchild view controller
//removeFromParentViewControllerÔÚÒƳýchildÇ°²»»áµ÷ÓÃ[self willMoveToParentViewController:nil] ,ËùÒÔÐèÒªÏÔʾµ÷ÓÃ
[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/

  Òƶ¯¿ª·¢ ×îÐÂÎÄÕÂ
Vue3×°ÔØaxiosºÍelement-ui
android adb cmd
¡¾xcode¡¿Xcode³£Óÿì½Ý¼üÓë¼¼ÇÉ
Android¿ª·¢ÖеÄÏ̳߳ØʹÓÃ
Java ºÍ Android µÄ Base64
Android ²âÊÔÎÄ×Ö±àÂë¸ñʽ
΢ÐÅС³ÌÐòÖ§¸¶
°²×¿È¨Ï޼Ǽ
ÖªºõÖ®×Ô¶¯ÑøºÅ
¡¾Android Jetpack¡¿DataStore
ÉÏһƪÎÄÕ      ÏÂһƪÎÄÕ      ²é¿´ËùÓÐÎÄÕÂ
¼Ó:2022-10-31 12:09:06  ¸ü:2022-10-31 12:10:55 
 
¿ª·¢: C++֪ʶ¿â Java֪ʶ¿â JavaScript Python PHP֪ʶ¿â È˹¤ÖÇÄÜ Çø¿éÁ´ ´óÊý¾Ý Òƶ¯¿ª·¢ ǶÈëʽ ¿ª·¢¹¤¾ß Êý¾Ý½á¹¹ÓëËã·¨ ¿ª·¢²âÊÔ ÓÎÏ·¿ª·¢ ÍøÂçЭÒé ϵͳÔËά
½Ì³Ì: HTML½Ì³Ì CSS½Ì³Ì JavaScript½Ì³Ì GoÓïÑÔ½Ì³Ì JQuery½Ì³Ì VUE½Ì³Ì VUE3½Ì³Ì Bootstrap½Ì³Ì SQLÊý¾Ý¿â½Ì³Ì CÓïÑÔ½Ì³Ì C++½Ì³Ì Java½Ì³Ì Python½Ì³Ì Python3½Ì³Ì C#½Ì³Ì
ÊýÂë: µçÄÔ ±Ê¼Ç±¾ ÏÔ¿¨ ÏÔʾÆ÷ ¹Ì̬ӲÅÌ Ó²ÅÌ ¶ú»ú ÊÖ»ú iphone vivo oppo СÃ× »ªÎª µ¥·´ ×°»ú ͼÀ­¶¡

360ͼÊé¹Ý ¹ºÎï Èý·á¿Æ¼¼ ÔĶÁÍø ÈÕÀú ÍòÄêÀú 2024Äê5ÈÕÀú -2024/5/19 23:29:27-

ͼƬ×Ô¶¯²¥·ÅÆ÷
¡ýͼƬ×Ô¶¯²¥·ÅÆ÷¡ý
TxTС˵ÔĶÁÆ÷
¡ýÓïÒôÔĶÁ,С˵ÏÂÔØ,¹ÅµäÎÄѧ¡ý
Ò»¼üÇå³ýÀ¬»ø
¡ýÇáÇáÒ»µã,Çå³ýϵͳÀ¬»ø¡ý
ͼƬÅúÁ¿ÏÂÔØÆ÷
¡ýÅúÁ¿ÏÂÔØͼƬ,ÃÀŮͼ¿â¡ý
  ÍøÕ¾ÁªÏµ: qq:121756557 email:121756557@qq.com  ITÊýÂë