使用 CABasicAnimation 移动它时不能使用 UIButton
Cannot use UIButton when using CABasicAnimation to move it
我正在尝试为 UIButton 制作动画,以便它在屏幕上四处移动,但是一旦它制作动画,当我尝试将它实际用作按钮时它就会崩溃。
这是不允许的吗?如何做到这一点?
我尝试将按钮放在 UIView 中,然后改为动画视图 - 仍然崩溃。
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
CATransaction.begin()
let animation = CABasicAnimation(keyPath: "position")
animation.fromValue = [view.layer.frame.width, 200]
animation.toValue = [0, 200]
animation.duration = 25.0
animation.repeatCount = .greatestFiniteMagnitude
button.layer.add(animation, forKey: "animatePosition")
CATransaction.commit()
}
尝试单击按钮时抛出以下异常:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI pointValue]:
unrecognized selector sent to instance 0x2816c4a40'
您分配的是两个数值的数组,而不是预期的位置类型。
CABasicAnimation
期望的值类型是 NSValue(cgPoint:)
.
您将通过以下方式修复该崩溃:
animation.fromValue = NSValue(cgPoint: CGPoint(x: view.layer.frame.width, y: 200.0))
animation.toValue = NSValue(cgPoint: CGPoint(x: 0, y: 200))
我正在尝试为 UIButton 制作动画,以便它在屏幕上四处移动,但是一旦它制作动画,当我尝试将它实际用作按钮时它就会崩溃。
这是不允许的吗?如何做到这一点?
我尝试将按钮放在 UIView 中,然后改为动画视图 - 仍然崩溃。
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
CATransaction.begin()
let animation = CABasicAnimation(keyPath: "position")
animation.fromValue = [view.layer.frame.width, 200]
animation.toValue = [0, 200]
animation.duration = 25.0
animation.repeatCount = .greatestFiniteMagnitude
button.layer.add(animation, forKey: "animatePosition")
CATransaction.commit()
}
尝试单击按钮时抛出以下异常:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI pointValue]: unrecognized selector sent to instance 0x2816c4a40'
您分配的是两个数值的数组,而不是预期的位置类型。
CABasicAnimation
期望的值类型是 NSValue(cgPoint:)
.
您将通过以下方式修复该崩溃:
animation.fromValue = NSValue(cgPoint: CGPoint(x: view.layer.frame.width, y: 200.0))
animation.toValue = NSValue(cgPoint: CGPoint(x: 0, y: 200))