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

Ios 如何在使用UIPopoverPresentationController时设置preferredContentSize的动画?,ios,animation,uiviewanimation,Ios,Animation,Uiviewanimation,只需设置preferredContentSize,我就可以成功地更改我展示的popover的框架。我现在想动画的内容大小的变化,但我一直没有成功。它只是即时更新,事实上我设置的延迟甚至没有得到尊重。如何使内容大小的变化具有动画效果 //In viewDidAppear: UIView.animateWithDuration(5, delay: 3, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.25, options: UIViewA

只需设置
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,并在制作动画之前进行不同类型的延迟。我使用我在此处找到的函数,因此:

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)
})

令人惊叹的!我还注意到它不喜欢内容大小为0,0-它似乎将其设置为默认大小。我想从0,0到320400设置动画。你知道怎么可以推翻它吗?对不起,我不知道。但从1x1尺寸开始可能会很高兴。我能得到的最低数量是60x60,这会产生一种不希望的效果,从该尺寸开始并制作动画。我想知道是否还有其他方法可以实现这一点。我可能还会为alpha制作动画。从60x60开始,alpha为0。我的猜测是这看起来很不错。府绸有一个默认的外观,我不相信你可以完全隐藏府绸。我可以在popover中为视图的alpha设置动画,但看起来不太对劲。