2015-07-28 3 views
1

Таким образом у меня есть следующая функцияIOS обновление CALayer в анимации блока UIView

- (void)setMoreMenuHidden:(BOOL)hidden animated:(BOOL)animated completion:(void(^)(BOOL))completion 
{ 
    if (!hidden) 
    { 
     [self.view layoutIfNeeded]; 
     [self.view setNeedsUpdateConstraints]; 
     [UIView animateWithDuration:0.5f animations:^ 
     { 
      [self.view layoutIfNeeded]; 
      [_profileInfoVC viewWillLayoutSubviews]; 
     }]; 
    } 
} 

и в _profileInfoVC я это делать

-(void)viewWillLayoutSubviews 
{ 
    [super viewWillLayoutSubviews]; 

    [self.view layoutIfNeeded]; 
    self.pictureImageView.layer.cornerRadius = self.pictureImageView.frame.size.width/2; 
    self.pictureImageView.clipsToBounds = YES; 
} 

Так я отдаю себе отчет в том, что слои игнорируются в анимации блоков, но Я предполагаю, что это также означает обновление вообще, так как оно остается довольно квадратным во время и после анимации. Есть ли решение для этого, которое не требует от меня создания Core Animation для всего слоя?

ответ

0

Так что вам кажется, что в этом блоке вас интересует блок Completion.

- (void)setMoreMenuHidden:(BOOL)hidden animated:(BOOL)animated completion:(void(^)(BOOL))completion 
{ 
    if (!hidden) 
    { 
     [self.view layoutIfNeeded]; 
     [self.view setNeedsUpdateConstraints]; 
     [UIView animateWithDuration:0.5f animations:^ 
     { 
      [self.view layoutIfNeeded]; 
     } 
     completion:^(BOOL finished) 
     { 
      [_profileInfoVC viewWillLayoutSubviews]; 
     }]; 
    } 
} 

выше, похоже, закрепилась мой вопрос, и я никогда не был фанатом прямого вызова viewWillLayoutSubviews непосредственно так, чтобы линия была изменена на [_profileInfoVC.view setNeedsLayout];

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