在我的应用程序中,我有几个淡入淡出。我使用Core Animation创建它们,使用类似于下面的语法。我可以使用更简洁的语法吗?
CATransaction.begin()
let fade = CABasicAnimation(keyPath: "opacity")
fade.fromValue = 0
fade.toValue = 1
fade.duration = 0.35
fade.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
fade.fillMode = kCAFillModeForwards
fade.removedOnCompletion = false
CATransaction.setCompletionBlock({
...
})
self.addAnimation(fade, forKey: nil)
CATransaction.commit()
答案 0 :(得分:2)
不确定。你可以自己做:
extension CABasicAnimation
{
convenience init(_ keyPath: String, from: AnyObject?, to: AnyObject?, duration: CFTimeInterval = 0.3)
{
self.init(keyPath: keyPath)
fromValue = from
toValue = to
self.duration = duration
}
}
extension CALayer
{
func addAnimation(animation: CAAnimation, forKey key: String?, completion: Void -> Void)
{
CATransaction.begin()
CATransaction.setCompletionBlock(completion)
addAnimation(animation, forKey: key)
CATransaction.commit()
}
}
// later...
let fade = CABasicAnimation("opacity", from: 0, to: 1, duration: 0.35)
self.addAnimation(fade, forKey: nil) {
// ...
}
答案 1 :(得分:1)
作为@ jtbandes'的替代品很好的答案(投票),在很多情况下你可以使用更简单的UIView动画:
UIView.animateWidhDuration(.35
animations:
{
myView.alpha = 0
}
completion:
{
(finshed) in
//your completion code here
})
我从你的评论中看到你正在为OS X开发。这需要一种不同的技术,为你的视图使用动画代理:
myView.animator.setAlphaValue(0.0)
如果您希望它使用与默认0.25秒持续时间不同的持续时间,则需要在动画上下文组中设置它:
NSAnimationContext.currentContext().beginGrouping()
NSAnimationContext.currentContext().setDuration(0.35)
myView.animator.setAlphaValue(0.0)
NSAnimationContext.currentContext().endGrouping()
我认为,与iOS不同,NSView没有本机alpha设置,而setAlphaValue实际上操纵了视图的图层的alpha值。在这种情况下,您可能需要将视图设置为图层备份。