如何解决Swift 5.4 UIImage 动画:如何从弹跳UIViewAnimate切换到拖动UIPanGestureRecognizer
我可以使用 animate 让它弹跳:
self.myImage.frame = CGRect(x: myImage.center.x,y: myImage.center.y,width: 50,height: 70)
UIView.animate(withDuration: 0.4,delay: 0,options: [.repeat,.autoreverse],animations: {
self.myImage.frame = CGRect(x: self.myImage.center.x,y: self.myImage.center.y,width: 70,height: 80);
}) { (completed) in }
或者,我可以使用 panGestureRecogniser 拖动它:
@IBAction func dragView(_ sender: UIPanGestureRecognizer) {
let translation = sender.translation(in: self.view)
if let viewToDrag = sender.view {
viewToDrag.center = CGPoint(x: viewToDrag.center.x + translation.x,y: viewToDrag.center.y + translation.y)
sender.setTranslation(.zero,in: viewToDrag)
}
如何从先弹跳然后切换到拖动?
解决方法
在设置动画时将 .allowUserInteraction
添加到您的选项中
self.myImage.frame = CGRect(x: myImage.center.x,y: myImage.center.y,width: 50,height: 70)
UIView.animate(withDuration: 0.4,delay: 0,options: [.repeat,.autoreverse,.allowUserInteraction],animations: {
self.myImage.frame = CGRect(x: self.myImage.center.x,y: self.myImage.center.y,width: 70,height: 80);
}) { (completed) in }
编辑:
要打破弹跳动画循环,请在平移手势的开始状态使用 self.myImage.layer.removeAllAnimations()
,如下所示:
@IBAction func dragView(_ sender: UIPanGestureRecognizer) {
let translation = sender.translation(in: self.view)
if let viewToDrag = sender.view {
if sender.state == .began {
viewToDrag.layer.removeAllAnimations()
}
viewToDrag.center = CGPoint(x: viewToDrag.center.x + translation.x,y: viewToDrag.center.y + translation.y)
sender.setTranslation(.zero,in: viewToDrag)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。