UIView类有一个类方法:
+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion
这是我第一次看到像动画和完成参数这样的论点。我在这个地方写什么:动画:( void(^)(void))动画? (^)和void是什么意思?
答案 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);
...其中animationFunction
和onComplete
是闭包(或块,使用Objective-C说法)。基本上,您可以将它们视为函数指针,以保留创建它们的上下文的状态。
无论如何,Objective-C中的(^)
标记只表示一个块。它之前的类型表示块的返回类型(在示例中为void
,这意味着两个块都不返回值),括号中后面的类型表示块所采用的任何参数(所以animations
为空,BOOL
块为completion
为{已完成'。