SwiftUI:如何在SwiftUI视图中取消计时器?

时间:2019-09-29 11:25:09

标签: timer swiftui

我正在SwiftUI视图中使用计时器,如以下代码所示。在某些情况下,它可以按预期工作,但我想取消/停止该计时器。计时器var上似乎没有“ .cancel”属性或方法。如何取消此计时器?有什么想法/提示吗?


import SwiftUI

struct ContentView: View {

    @State private var selection = 2

    @State private var rotation: Double = GBstrtest

    let timer = Timer.publish (every: 0.8, on: .current, in: .common).autoconnect()

    var body: some View {
        TabView(selection: $selection){
            Text("Settings")
                .font(.title)
                .tabItem {
                    VStack {
                        Image(systemName: "gear")
                        .font(Font.system(.title ))
                        Text("Settings")
                    }
                }
                .tag(0)
            VStack {
                Divider().padding(2)
                ZStack {
                    Image("image1")
                        .resizable()
                        .aspectRatio(contentMode: .fit)
                    Image("image2")
                        .resizable()
                        .aspectRatio(contentMode:.fit)
                        .rotationEffect(.degrees(rotation))
                        .animation(.easeInOut(duration: 0.3) )
                        .padding(EdgeInsets(top: 0, leading: 50, bottom: 0, trailing: 50))
              }
              Spacer()
            }
            .tabItem {
                VStack {
                    Image(systemName: "speedometer")
                        .font(Font.system(.title ))
                    Text("Read Meter")
                }
            }
            .tag(1)
        }
        .onReceive(timer) {
            _ in self.rotation = Double.random(in: 0 ... 200)
            // How do I cancel timer HERE!?
        }
    }
}

2 个答案:

答案 0 :(得分:5)

完整周期如下:

count

Voila!一个可重复使用的计时器,您可以根据需要多次使用它!

答案 1 :(得分:2)

在条件语句中,使用以下代码:

self.timer.upstream.connect().cancel()