我只需设置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)
答案 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)
})