我正在使用objective-c处理iOS7中的动画。我正在尝试使用animateWithDuration函数,该函数具有以下定义:
[UIView animateWithDuration:(NSTimeInterval) animations:^(void)animations completion:^(BOOL finished)completion]
我可以使用它很好,但它使我的代码过长,因为我必须将我的动画和完成函数全部放在此声明中。我想创建一个单独的函数并将其传递给动画函数调用。
具体来说,我希望能够有一个单独的完成函数用于多个动画,这也需要能够传递特定视图id的参数。
有人可以解释如何设置一个可以传递给animate函数的函数,以及^(void)和^(BOOL)中的'^'是什么意思?
由于
答案 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];