在翻译动画期间跟踪UIView位置

时间:2017-03-16 17:37:30

标签: ios swift view uiviewanimation cgaffinetransform

我知道之前已经问过这个问题,但所有答案都是在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
})

我想要做的是跟踪整个动画中的当前帧位置。我是否需要采取不同的方法来实现这一目标?

2 个答案:

答案 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 = ...
}

关于KVO的完整文章: https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html#//apple_ref/doc/uid/TP40014216-CH7-XID_8