UIView animateWithDuration动画和完成参数的单独函数

时间:2014-07-02 19:24:57

标签: ios objective-c function animation animatewithduration

我正在使用objective-c处理iOS7中的动画。我正在尝试使用animateWithDuration函数,该函数具有以下定义:

[UIView animateWithDuration:(NSTimeInterval) animations:^(void)animations completion:^(BOOL finished)completion]

我可以使用它很好,但它使我的代码过长,因为我必须将我的动画和完成函数全部放在此声明中。我想创建一个单独的函数并将其传递给动画函数调用。

具体来说,我希望能够有一个单独的完成函数用于多个动画,这也需要能够传递特定视图id的参数。

有人可以解释如何设置一个可以传递给animate函数的函数,以及^(void)和^(BOOL)中的'^'是什么意思?

由于

2 个答案:

答案 0 :(得分:0)

^表示a block(请注意,这些不是函数)。你当然可以做你想做的事。你会用:

returnType (^blockName)(parameterTypes) = ^returnType(parameters) {...};

所以你的代码看起来像这样:

void (^animations)() = ^{
    // Do some animations.
};

void (^completion)(BOOL) = ^(BOOL finished){
    // Complete.
};

[UIView animateWithDuration:1 animations:animations completion:completion];

仅供参考,这是块语法的一个很好的参考:http://goshdarnblocksyntax.com/

答案 1 :(得分:0)

不要过分复杂化。只需使用此方法:

[UIView animateWithDuration:1.0 animations:^{
    // your animations
}];

下次遇到一个你没用的块时,只需将nil放入块中即可。

[UIView animateWithDuration:1.0
                     animations:^{
                         // your animations
                     }
                     completion:nil];

^表示您在Objective-C中声明了一个块。

如果您只想缩短方法调用次数,可以执行以下操作:

void (^myCompletionBlock)(BOOL finished) = ^void(BOOL finished) {
    // What you want to do on completion
};

[UIView animateWithDuration:1.0
                 animations:^{
                     // your animations
                 }
                 completion:myCompletionBlock];