转换不适用于动画
Transform doesn't work with animation
我正在尝试使用 CATransform3DMakeScale
设置 CALayer
以增加 viewcontroller 底部的宽度。我可以让图层很好地缩放,但是当我尝试通过动画应用变换时,图层在没有任何动画的情况下变换。
let progressBar1 = CALayer()
override func viewDidAppear() {
progressBar1.bounds = CGRect(x: 0, y: 0, width: 1, height: 5)
progressBar1.position = CGPoint(x: 0, y: 600)
progressBar1.backgroundColor = UIColor.white.cgColor
view.layer.addSublayer(progressBar1)
extendBar1()
}
func extendBar1(){
let transform1 = CATransform3DMakeScale(30, 1, 0)
let anim = CABasicAnimation(keyPath: "transform")
anim.isRemovedOnCompletion = false
anim.fillMode = kCAFillModeForwards
anim.toValue = NSValue(caTransform3D:transform1)
anim.duration = 10.00
progressBar1.add(anim, forKey: "transform")
}
我也用 CATransaction
尝试了以下操作,但我得到了相同的结果
func extendBar3(){
let transform1 = CATransform3DMakeScale(30, 1, 0)
CATransaction.begin()
CATransaction.setAnimationDuration(7.0)
progressBar1.transform = transform1
CATransaction.commit()
}
剩下的主要问题是这一行:
let transform1 = CATransform3DMakeScale(30, 1, 0)
将 0
更改为 1
。
(准确地说,结果可能仍然不是您想要的动画,但至少您应该看到一些东西 — 当然,只要 (0,600)
没有完全离开屏幕。)
我正在尝试使用 CATransform3DMakeScale
设置 CALayer
以增加 viewcontroller 底部的宽度。我可以让图层很好地缩放,但是当我尝试通过动画应用变换时,图层在没有任何动画的情况下变换。
let progressBar1 = CALayer()
override func viewDidAppear() {
progressBar1.bounds = CGRect(x: 0, y: 0, width: 1, height: 5)
progressBar1.position = CGPoint(x: 0, y: 600)
progressBar1.backgroundColor = UIColor.white.cgColor
view.layer.addSublayer(progressBar1)
extendBar1()
}
func extendBar1(){
let transform1 = CATransform3DMakeScale(30, 1, 0)
let anim = CABasicAnimation(keyPath: "transform")
anim.isRemovedOnCompletion = false
anim.fillMode = kCAFillModeForwards
anim.toValue = NSValue(caTransform3D:transform1)
anim.duration = 10.00
progressBar1.add(anim, forKey: "transform")
}
我也用 CATransaction
尝试了以下操作,但我得到了相同的结果
func extendBar3(){
let transform1 = CATransform3DMakeScale(30, 1, 0)
CATransaction.begin()
CATransaction.setAnimationDuration(7.0)
progressBar1.transform = transform1
CATransaction.commit()
}
剩下的主要问题是这一行:
let transform1 = CATransform3DMakeScale(30, 1, 0)
将 0
更改为 1
。
(准确地说,结果可能仍然不是您想要的动画,但至少您应该看到一些东西 — 当然,只要 (0,600)
没有完全离开屏幕。)