gpt4 book ai didi

ios - 如何让动画和手势识别器协同工作? ( swift )

转载 作者:行者123 更新时间:2023-11-30 11:31:41 24 4
gpt4 key购买 nike

我做了一个简单的项目,带有滑动手势识别器和动画。我让标签移动并且每 3 秒增加一次数字。每次滑动我都需要减少数量。我的手势识别器对象与标签绑定(bind)在一起,即它仅在标签范围内工作。当 prog 在没有动画的情况下工作时,一切正常,但是当它有动画时,我的手势识别器什么也不做。如何使手势识别器与动画同时工作,即以动画方式响应我的滑动。需要帮助。

`

 @IBOutlet weak var label1: UILabel!

var number : Int = 0
var timer = Timer()

@IBAction func label1SwipeRight(_ sender: UISwipeGestureRecognizer) {
number += 1
label1.text = String(number)
}

func animate1() {
UIView.animate(withDuration: 4.0, delay: 0.0, options: .allowUserInteraction, animations: {
let num1 : CGFloat = CGFloat(arc4random_uniform(667))
let num2 : CGFloat = CGFloat(arc4random_uniform(375))
self.label1.frame.origin.y = num1
self.label1.frame.origin.x = num2
}, completion: {(bool) in
self.animate1()
print("Animation1 completed")
})
}

func timerExample() {
Timer.scheduledTimer(timeInterval: 4, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)

}

@objc func updateTimer() {
label1.text = String(Int(label1.text!)! + 1)
}`

最佳答案

默认情况下,当动画“运行”时, View 对象会阻止用户交互。您需要使用“长格式”动画方法之一,并传入选项.allowUserInteraction。像这样的事情:

UIView.animate(duration: 0.5,
delay: 0.0,
options: .allowUserInteraction,
animations: {
myView.alpha = 0.5
})

但请注意,如果您要设置动画的是 View 的位置,则用户将无法在 View 对象移动时点击它。这是因为位置动画并没有真正将对象随着时间的推移从一个地方移动到另一个地方。它只是创造了那种外观。在幕后,对象实际上在动画开始时跳到其最终位置。

如果您需要能够在对象移动时点击/拖动/滑动它们,您将必须自己执行此操作。您所做的是将手势识别器放在包含整个运动范围(可能是整个屏幕)的父 View 上。然后您需要使用动画 View 层的表示层,将手势识别器的点的坐标转换为坐标空间到图层的坐标空间,并使用图层的 hitTest 方法判断该点是否在图层上。

我在 Github 上有一个名为 iOS-CAAnimation-group-demo 的项目它做了类似的事情(它沿着复杂的路径对 ImageView 进行动画处理,您可以点击 ImageView 以在动画“飞行中”时暂停动画。

这是几年前的作品,所以它是用 Objective-C 编写的,但它至少应该有助于说明该技术。

关于ios - 如何让动画和手势识别器协同工作? ( swift ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50191608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com