0

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

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

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

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

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

谢谢

4

2 回答 2

0

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

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/

于 2014-07-02T19:34:15.350 回答
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];
于 2014-07-02T19:34:30.453 回答