如何在使用UIPopoverPresentationController时为preferredContentSize设置动画?

时间:2015-04-25 03:53:58

标签: ios animation uiviewanimation

我只需设置preferredContentSize即可成功更改我出现的popover的框架。我现在想要动画内容大小的变化,但我没有成功。它只是即时更新,实际上我设置的延迟甚至没有得到尊重。如何动画内容大小的变化?

//In viewDidAppear:
UIView.animateWithDuration(5, delay: 3, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.25, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in
    self.preferredContentSize = CGSizeMake(320, 400)
}, completion: nil)

1 个答案:

答案 0 :(得分:1)

我能够重现你的问题,然后找到一种方法让它发挥作用。动画延迟在此处不起作用,因此将其设置为0并在执行动画之前执行不同类型的延迟。我使用我在SO上找到的函数:

func delay(delay: Double, closure:()->()) {
    dispatch_after(
        dispatch_time(
            DISPATCH_TIME_NOW,
            Int64(delay * Double(NSEC_PER_SEC))
        ),
        dispatch_get_main_queue(), closure)
}

将它放在类定义之外的任何swift文件的顶部。

然后将代码更改为:

delay(3, { () -> () in
    UIView.animateWithDuration(5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.25, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in
        self.preferredContentSize = CGSizeMake(320, 400)
        }, completion: nil)
})