2015-05-20 1 views
1

У меня есть вид контейнера, который имеет один подзаголовок. Я хочу заменить этот subview другим видом, который отличается от оригинала, поэтому размер контейнера также должен быть изменен. Вот что я пытаюсь сделать.Заменить subview другим, оживляя изменение размера

UIView *content = NEW_CONTENT; 
content.translatesAutoresizingMaskIntoConstraints = NO; 

[self.contentContainer layoutIfNeeded]; // the container view 

// make the old content disappear first 
[UIView animateWithDuration:0.3 
       animations:^{ 
        UIView *oldContent = [self.contentContainer.subviews firstObject]; 
        oldContent.alpha = 0.0f; 
       } 
       completion:^(BOOL finished) { 
        // then replace it with a new content 
        [UIView transitionWithView:self.contentContainer 
             duration:0.1 
             options:0 
            animations:^{ 
             [[self.contentContainer.subviews firstObject] removeFromSuperview]; 
             [self.contentContainer addSubview:content]; 
             [content autoPinEdgesToSuperviewEdgesWithInsets:UIEdgeInsetsZero]; 

             [self.contentContainer layoutIfNeeded]; 
            } 
            completion:^(BOOL finished) { // completion stuff}]; 
       }]; 

Старая непрозрачность содержимого анимируется должным образом, но макет изменяется без какой-либо анимации. Как я могу это исправить?

ответ

0

// 3 просмотры (контейнер, первый, второй) выделяет в viewdidload

UIView *container=[[UIView alloc] initWithFrame:CGRectMake(20, 20, 250, 300)]; 
container.backgroundColor=[UIColor redColor]; 
[self.view addSubview: container]; 

UIView *first=[[UIView alloc] initWithFrame:CGRectMake(100, 50, 100, 100)]; 
first.backgroundColor=[UIColor blueColor]; 
[self.view addSubview: first]; 

UIView *second=[[UIView alloc] initWithFrame:CGRectMake(50, 50, 200, 150)]; 
second.backgroundColor=[UIColor purpleColor]; 
second.alpha=0; 
[self.view addSubview: second]; 

// Анимация Функция с первым видом удален ADN изменения рамы контейнера и добавления второго вида

[UIView transitionWithView:first duration:1.0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ 
    first.alpha=0.0; 

} completion:^(BOOL finished) { 
    [UIView transitionWithView:second duration:1.0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ 
     container.frame=CGRectMake(50, 10, 100, 200); 
     second.alpha=1.0; 

    } completion:^(BOOL finished) { 

    }]; 
}]; 

Я думаю, что ур пытается использовать этот же сценарий. Он отлично работает в моем случае

Смежные вопросы