2013-02-26 66 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. 
    } 
} 

但是,這只是一個骯髒的解決方案。

相關問題