我知道之前已经问过这个问题,但所有答案都是在Objective C中提供的,我正在寻找一个Swift解决方案。如果我错过了现有的Swift解决方案,请告诉我,我将关闭此问题。
这就是我制作动画视图的方式:
UIView.animate(withDuration: 10.0, animations: { () in
let translateTransform = CGAffineTransform.init(translationX: 0.0, y: Constants.screenHeight)
self.icon.transform = translateTransform
})
我想要做的是跟踪整个动画中的当前帧位置。我是否需要采取不同的方法来实现这一目标?
答案 0 :(得分:0)
您可能想尝试在动画期间获取视图框架
return tf.Print(i+1, [i+1])
这将在代码运行时为您提供帧,因此如果您想在整个动画中记录帧,您可能需要使用Timer(以前的NSTimer)。
在此示例中,可选的是强制解包,因此如果您不确定它是否为零,则可能需要使用if-let语句。
希望这有帮助,如果您有任何其他问题,请告诉我。
答案 1 :(得分:0)
UIView.frame是可观察的。尝试将KVO
用于frame
keyPath:
view.addObserver(self, forKeyPath:"frame", options:.new, context:nil)
override func observeValue(forKeyPath keyPath: String, ofObject object: Any, change: [String: id], context: UnsafeMutableRawPointer) {
print("value of \(keyPath) changed: \(change[NSKeyValueChangeNewKey])")
}
KVO不适用于不扩展NSObject的类。
为了使用Swift类进行键值观察,您应该从NSObject
继承。
将dynamic
修饰符添加到您要观察的任何属性。
有关dynamic
的更多信息:https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html#//apple_ref/doc/uid/TP40014216-CH4-ID57
class YourClass: NSObject {
dynamic var view: UIView = ...
}