如何在特定图像旋转时触发事件?

时间:2018-02-12 09:10:15

标签: ios swift web-applications uiimageview geolocation

我正在使用此代码将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")
}

1 个答案:

答案 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

    }
}

希望它有效!!