UIInterpolationEffect keyPathsAndRelativeValues在停止移动后继续发出值

时间:2018-12-16 14:37:56

标签: ios swift uimotioneffect

我正在实现自己的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次,其中减少通话时间。最终它停止了。

这对我的经历有非常不好的影响,因为我不希望我的闭包继续被调用。

0 个答案:

没有答案