WKCrownDelegate.crownDidRotate() 并不总是接收事件

WKCrownDelegate.crownDidRotate() not always receiving events

提问人:gizmodus 提问时间:10/18/2023 更新时间:10/18/2023 访问量:21

问:

我有一个具有可滚动视图的 WatchOS 应用程序。根据应用程序的状态,我希望接收牙冠旋转事件。

为了实现此行为,我设置了一个计时器,用于调用 crownSequencer 的 focus() 方法。

在 XCode 的 Apple Watch 模拟器中,应用程序的行为一致,没有问题。但是,一些用户(并非全部)报告说旋转表冠不起作用。这种行为可能是什么原因?

以下是相关代码:


import WatchKit
import Foundation
import HealthKit

class MyInterfaceController: WKInterfaceController {

    var controlTimer: Timer?;
    var restTimer: Timer?;
    var timer: Timer?;

    override func awake(withContext context: Any?) {
        super.awake(withContext: context)
        setupTimers()
    }

    override func willActivate() {
        super.willActivate()
        setupTimers()
    }


    override func didAppear() {
        super.didAppear()
        setupTimers()
    }

    func setupTimers() {
        clearTimers()

        restTimer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true, block: { _ in
            // Do something
        });

        timer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true, block: { _ in
            // Do something
        });

        controlTimer = Timer.scheduledTimer(withTimeInterval: 0.2, repeats: true, block: { _ in
            if (someCondition == false) {
                self.crownSequencer.resignFocus()
            } else {
                self.crownSequencer.delegate = self
                self.crownSequencer.focus()
            }
        });
    }

    func clearTimers() {
        controlTimer?.invalidate()
        controlTimer = nil

        restTimer?.invalidate()
        restTimer = nil

        timer?.invalidate()
        timer = nil
    }
}

extension MyInterfaceController : WKCrownDelegate {
    func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double) {
        if (rotationalDelta > 0.2) {
            // Do something
        } else if (rotationalDelta < -0.2) {
            // Do something
        }
    }
}
Swift WatchKit watchOS

评论


答: 暂无答案