2015-11-27 2 views
1

Итак, у меня есть очень простой UIPresentationController, который в основном отображает контентное изображение с центром на экране, его размер определяется контроллером вида preferredContentSize. (Его очень симмиллар для обычного контроллера модального представления, представленного как FormSheet).UIPresentationController preferredContenteSize update animated

То, что я пытаюсь добиться, заключается в том, чтобы динамически обновлять размер этого представления контроллеров представлений, просто изменив его preferredContentSize.

Когда я установил preferredContentSize мой подкласс UIPresentationController получить информацию об этом в:

-(void)preferredContentSizeDidChangeForChildContentContainer:(id<UIContentContainer>)container 

Но как я могу здесь изменить размер кадра просмотра с анимацией? Если бы я просто позвонить:

-(void)preferredContentSizeDidChangeForChildContentContainer:(id<UIContentContainer>)container 
{ 
    [UIView animateWithDuration:1.0 animations:^{ 
     self.presentedView.frame = [self frameOfPresentedViewInContainerView]; 
    } completion:nil]; 
} 

Immidiately вызывается containerViewWillLayoutSubviews и кадр меняется без анимации.

-(void)containerViewWillLayoutSubviews 
{ 
    self.presentedView.frame = [self frameOfPresentedViewInContainerView]; 
} 

Пожалуйста, помогите мне найти способ изменить его с помощью анимации. Это должно быть возможно, поскольку оно изменяется с анимацией, например, когда происходит ротация.

+0

ли вы исправить это без использования какого-то странного 'isAnimating' флага в' containerViewWillLayoutSubviews'? – fruitcoder

ответ

1

Вы должны использовать автоматическую компоновку. Сделайте выход из контейнеров ограничения высоты:

@property (nonatomic, strong, readwrite) IBOutlet NSLayoutConstraint *drawerViewHeightConstraint;

затем добавьте следующий код:

- (void)preferredContentSizeDidChangeForChildContentContainer:(id<UIContentContainer>)container 
{ 
    [super preferredContentSizeDidChangeForChildContentContainer:container]; 
    self.drawerViewHeightConstraint.constant = container.preferredContentSize.height; 

    [UIView animateWithDuration:0.25 
        animations:^{ 
         [self.view layoutIfNeeded]; 
        }]; 
}