我正在使用此代码将myCompass
- ImageView与当前设备标题对齐。 (将图像旋转到指向北方 - > 它是指南针)
func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
let Heading = newHeading.trueHeading.toRadians
UIView.animate(withDuration: 0.5) {
self.myCompass.transform = CGAffineTransform(rotationAngle: CGFloat(-Heading))
}
}
这段代码运行得很安静,但正如你所看到的,我添加了一个小动画,以便IMageView的旋转看起来不那么难看。
问题:现在,如果myCompass
- 视图指向北极,我想要触发事件。
if (Heading > -4 && Heading < 4) {
event()
}
- &GT;由于动画,我无法检查heading
因为它可能需要约0.5 seconds
,直到针准确指向北。
- &GT;我无法检查标题&amp;添加0.5-delay
,因为标题可能会再次在此0.5 seconds
内更改
那么我的问题是:
是否可以侦听ImageView的某种特定旋转事件?
或者是否有更优雅的方式来获得这样的结果?
也许像这样的伪代码:
myCompass.onOrientation(rotationAngleMin: 5, rotationAngleMax: -5, event)
func event() {
print("hurray")
}
答案 0 :(得分:0)
您可以通过以下方式尝试对图像的transform属性进行键值观察:
myCompass.addObserver(self, forKeyPath: "transform", options: [.old, .new], context: nil)
然后按以下方法观察
override func addObserver(_ observer: NSObject, forKeyPath keyPath: String, options: NSKeyValueObservingOptions = [], context: UnsafeMutableRawPointer?) {
if keyPath == "transform" {
// Check your updates here
}
}
希望它有效!!