gpt4 book ai didi

ios - 在 SwiftUI WidgetKit 中的何处添加观察者

转载 作者:行者123 更新时间:2023-12-05 02:04:43 25 4
gpt4 key购买 nike

我正在尝试构建一个更好的 WidgetKit ,我希望每次电池状态或电量变化时都能刷新 WidgetKit 。我知道两者都需要添加通知。所以我的逻辑是,当有关电池状态的通知发生变化时,我想刷新时间线。

但是我无法理解将观察者放在 TimelineProvider 或 Widget View 下的什么位置?

struct timeWidgetEntryView : View {
var entry: Provider.Entry
let NC = NotificationCenter.default

init(entry:Provider.Entry) {
self.entry = entry

}

func batteryLevelDidChange(_ notification: Notification) {
UIDevice.current.isBatteryMonitoringEnabled = true
var level = UIDevice.current.batteryLevel
level = level * 100
WidgetCenter.shared.reloadAllTimelines()
NSLog("Level changed / state changed")
}

var body: some View {
VStack {
Text(entry.date, style: .time).foregroundColor(.black).frame(minWidth: /*@START_MENU_TOKEN@*/0/*@END_MENU_TOKEN@*/, idealWidth: 100, maxWidth: 100, minHeight: /*@START_MENU_TOKEN@*/0/*@END_MENU_TOKEN@*/, idealHeight: /*@START_MENU_TOKEN@*/100/*@END_MENU_TOKEN@*/, maxHeight: 50, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
Text("Battery : \(entry.batteryState)").foregroundColor(.black).frame(minWidth: /*@START_MENU_TOKEN@*/0/*@END_MENU_TOKEN@*/, idealWidth: /*@START_MENU_TOKEN@*/100/*@END_MENU_TOKEN@*/, maxWidth: /*@START_MENU_TOKEN@*/.infinity/*@END_MENU_TOKEN@*/, minHeight: /*@START_MENU_TOKEN@*/0/*@END_MENU_TOKEN@*/, idealHeight: /*@START_MENU_TOKEN@*/100/*@END_MENU_TOKEN@*/, maxHeight: 50, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
}
.cornerRadius(10)
.frame(width:.infinity, height:.infinity, alignment: .center)
.onReceive(NotificationCenter.default.publisher(for: UIDevice.batteryStateDidChangeNotification))
{ obj in
// Change key as per your "userInfo"
if let userInfo = obj.userInfo, let info = userInfo["info"] {
print(info)
}

WidgetCenter.shared.reloadAllTimelines()
}
}
}

但它没有按预期工作,所以我的问题是我是否应该将观察者移至时间线提供者?如果是,在哪里?

最佳答案

您需要改为在主应用程序中收听通知 - 如 Apple 教程中所述:

然后,当您收到 UIDevice.batteryStateDidChangeNotification 时,只需调用:

WidgetCenter.shared.reloadAllTimelines()

要在您的应用不可见时继续收到通知,您可能需要启用后台通知。看到这个线程:

关于ios - 在 SwiftUI WidgetKit 中的何处添加观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64199749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com