如何在Swift中调用animateAlongsideTransition?

时间:2014-06-27 21:36:34

标签: ios swift ios8

我尝试了很多组合,以便在Swift中为转换协调员调用animateAlongSideTransition。我觉得我错过了一些非常愚蠢的东西。

如果我想调用它(来自Swift文档):

func animateAlongsideTransition(_ animation: ((UIViewControllerTransitionCoordinatorContext!) -> Void)!,
                     completion completion: ((UIViewControllerTransitionCoordinatorContext!) -> Void)!) -> Bool

我该怎么办?我只是想在动画块中传递一些东西而在完成块中没有任何东西。

2 个答案:

答案 0 :(得分:7)

这绝对是你想要做的:

coordinator.animateAlongsideTransition({ context in
        // do whatever with your context
        context.viewControllerForKey(UITransitionContextFromViewControllerKey)
    }, completion: nil)

如果对第一个隐式参数使用$0之类的变量,也可以省略参数,所以

coordinator.animateAlongsideTransition({
        $0.viewControllerForKey(UITransitionContextFromViewControllerKey)
    }, completion: nil)

in语法起初很惊讶,但你必须只学习一次:)

  • 花括号定义函数内的块
  • 您使用in将参数与块体
  • 分开
  • 但正如我上面所说,你可以使用$0$1$2来省略参数......

似乎有一个更冗长的语法,但它绝对不符合Swift精神(而且我太懒了,不能在那里发布)

希望它能帮助(我不会忘记任何事情......)

修改

另一个专业提示是当块是唯一的参数时,你甚至可以省略括号 (下一个不起作用,但是要想出这个想法)

coordinator.animateAlongsideTransition{
        $0.viewControllerForKey(UITransitionContextFromViewControllerKey)
    }

答案 1 :(得分:2)

你这样做(至少在Swift 1.2中):

transitionCoordinator.animateAlongsideTransition({context in //things to animate, for example: view.alpha = 0.5
}, completion: nil)