2011-10-05 101 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]; 

我不知道这是否将运行在这两种情况下或没有完成块。