UIView animateWithDuration 动画和完成参数的单独函数
Posted
技术标签:
【中文标题】UIView animateWithDuration 动画和完成参数的单独函数【英文标题】:Separate function for UIView animateWithDuration animations and completion parameters 【发布时间】:2014-07-02 19:24:57 【问题描述】:我正在使用 Objective-c 在 ios7 中处理动画。我正在尝试使用具有以下定义的 animateWithDuration 函数:
[UIView animateWithDuration:(NSTimeInterval) animations:^(void)animations completion:^(BOOL finished)completion]
我可以很好地使用它,但它使我的代码过长,因为我必须将我的动画和完成函数都放在这个声明中。我想创建一个单独的函数并将其传递给动画函数调用。
具体来说,我希望能够有一个单独的完成函数来与多个动画一起使用,这还需要能够将特定视图 id 的参数传递给它。
有人能解释一下如何设置一个可以传递给 animate 函数的函数,以及 ^(void) 和 ^(BOOL) 中的 '^' 是什么意思吗?
谢谢
【问题讨论】:
了解 Objective-C 块。 ***.com/questions/3499186/… Blocks 是 ^ 的意思。 正如“rmaddy”已经提到的,进入并学习块编程。它是 Objective-c 编程的重要组成部分。 谢谢我会调查块 【参考方案1】:^
表示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/
【讨论】:
【参考方案2】:不要使事情过于复杂。只需使用此方法即可:
[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];
【讨论】:
以上是关于UIView animateWithDuration 动画和完成参数的单独函数的主要内容,如果未能解决你的问题,请参考以下文章
在 UIView2 上方显示 UIView1,但在 UIView1 上方显示 UIView2 输入方式
统计从多个 UIView 中随机抽出的 UIView 数量,即:从 9 个 UIView 中随机抽出 5 个 UIView,然后执行操作