2013-02-26 68 views
1

在layoutSubviews中,我将子视图布局到合适的位置,并且其中一些应用了一些转换。现在我想在这个子视图上制作可重复的缩放动画来吸引注意力。但是,当我使用[UIView animate ....]启动动画时,通过更改transform属性触发的layoutSubviews方法(与动画冲突(它覆盖变换和动画未播放))。iOS:在不调用布局的情况下动画子视图子视图

有没有什么好的方法(没有布尔标志)来处理这种行为?

例子:

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    myChildView.transform = CGAffineTransformMake....; 
} 

- (void)animate { 
    CGAffineTransform originalTransform = myChildView.transform; 
    [UIView animateWithDuration:0.1f 
          delay:0.0f 
         options:UIViewAnimationOptionAutoreverse 
        animations:^{ 
         [UIView setAnimationRepeatCount:4]; 
         //next line of code produce calling layoutSubviews 
         myChildView.transform = CGAffineTransformMakeScale(1.15f, 1.15f); 
        } completion:^(BOOL finished){ 
         myChildView.transform = originalTransform; 
         //after this also called layoutSubviews 
        }]; 
} 

回答

-1

有没有什么好办法(没有布尔标志)来处理这个问题?

是的。摆脱“layoutSubviews”方法,并在另一种方法中为子视图设置变换。

[self.parentView setUpChildrenViews]; 
... 
[self.parentView animate]; 
1

我建议你最好不要使用layoutSubviews。相反,在init方法或从init调用的自定义方法内创建和定位并转换子视图。

1

最近我遇到了这个问题。我重写视图控制器内的方法viewDidLayoutSubviews来控制动画。

- (void)viewDidLayoutSubviews { 
    // This method will be called after subview's layoutSubviews. 
    if (self.shouldAnimated) { 
     // Do animation at here. 
    } 
} 

但是,这只是一个肮脏的解决方案。

相关问题