2011-10-05 78 views
1

遵守本守則:如何在動畫製作與非動畫製作時不重複此代碼?

- (void)hideRectangleWithAnimation:(BOOL)animate completion:(void (^)(void))completionBlock 
{ 
    if (animate) 
    { 
     // Hide rectangle 
     [UIView animateWithDuration:0.3 animations:^{ rect.alpha = 0; } completion:^(BOOL finished){ 
      completionBlock(); 
     } 
    } 
    else 
    { 
     rect.alpha = 0; 
    } 
} 

有沒有辦法不重複的物性變化:rect.alpha = 0;兩次?

這行代碼目前是微不足道的,但可能有一個更復雜的情況下發生多個東西。

回答

1

我想我剛剛找到答案。我可以將rect.alpha = 0;放入一個塊變量中,然後使用它。

void (^animationBlock)(void) = ^{ 
    rect.alpha = 0; 
}; 

if (animate) 
{ 
    [UIView animateWithDuration:0.3 animations:animationBlock completion:^(BOOL finished){ 
     completionBlock(); 
    }]; 
} 
else 
{ 
    animationBlock(); 
} 
+0

這是我想到的一種方式。另一個可能是嘗試在0.0f或0.3f之間切換動畫的持續時間,如果這符合您的需求。 –

+0

@MatthewGillingham啊,是的,那也可以。 – pixelfreak

+0

@MthetheGGillingham雖然如果持續時間爲0,它會立即發生,還是會在單獨的線程或下一個執行週期運行? – pixelfreak

0

我相信這會工作

[UIView setAnimationsEnabled:animate]; 
[UIView animationWithDuration:...]; 
[UIView setAnimationsEnabled:YES]; 

我不知道這是否將運行在這兩種情況下或沒有完成塊。