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,然后执行操作

UIView 类别 - 自定义方法不返回 UIView

IOS将UIVIew中的UIImageView扁平化为单个UIView [重复]

UIView - 啥覆盖将允许更新 UIView 框架

UIView 中的 UIView 问题