我应该作为参数传递什么?

时间:2011-06-28 12:35:07

标签: iphone uiview

UIView类有一个类方法:

+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

这是我第一次看到像动画和完成参数这样的论点。我在这个地方写什么:动画:( void(^)(void))动画? (^)和void是什么意思?

2 个答案:

答案 0 :(得分:6)

^字符表示c块。块是代码块,只要函数需要它就会执行。我不确定animations:参数,但是当动画结束时completion:块被执行(作为名称状态)。

可能的调用可能如下所示:

[UIView transitionWithView:myView 
                  duration:1.0 
                   options:0 
                animations:^{} /* this denotes empty block */
                completion:^{ 
                                NSLog(@"Animation has completed");
                           }
];

答案 1 :(得分:3)

您所看到的是Objective-C的block语法。语法完全是钝的,令人沮丧的,令人头脑麻木,但它所做的实际上非常简单。

一个块在逻辑上等同于其他语言中的closure,例如JavaScript,所以忽略了令人讨厌的语法,你可以认为签名是这样的:

function transitionWithView(view, duration, options, animationFunction, onComplete);

...其中animationFunctiononComplete是闭包(或块,使用Objective-C说法)。基本上,您可以将它们视为函数指针,以保留创建它们的上下文的状态。

无论如何,Objective-C中的(^)标记只表示一个块。它之前的类型表示块的返回类型(在示例中为void,这意味着两个块都不返回值),括号中后面的类型表示块所采用的任何参数(所以animations为空,BOOL块为completion为{已完成'。