我正在实现自己的UIInterpolationEffect
,可以将其关闭。这是我的课程:
class ClosureMotionEffect: UIInterpolatingMotionEffect {
typealias MotionClosure = (UIOffset) -> Void
var closure: MotionClosure?
init(closure: @escaping MotionClosure) {
self.closure = closure
super.init(keyPath: "", type: .tiltAlongVerticalAxis)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func keyPathsAndRelativeValues(forViewerOffset viewerOffset: UIOffset) -> [String : Any]? {
super.keyPathsAndRelativeValues(forViewerOffset: viewerOffset)
print(viewerOffset)
closure?(viewerOffset)
return nil
}
}
由于某种原因,当我在调用闭包之前打印值时,如果我在玩设备,然后将其放在桌子上,函数keyPathsAndRelativeValues
会继续被调用约10-20次,其中减少通话时间。最终它停止了。
这对我的经历有非常不好的影响,因为我不希望我的闭包继续被调用。