ScrollView 内容偏移冻结指南针

问题描述 投票:0回答:0

屏幕上有一个scrollView,其下方是一个指南针箭头。一旦我在屏幕上向上或向下移动滚动视图的内容,指南针就会停止工作。当我释放scrollView时,罗盘就会恢复。 当我通过更改计时器上的变量来旋转指南针箭头时,移动滚动视图的内容不会影响此过程。 怎么解决?

import SwiftUI

import Foundation
import Combine
import CoreLocation

class CompassHeading: NSObject, ObservableObject, CLLocationManagerDelegate {
var objectWillChange = PassthroughSubject<Void, Never>()
var degrees: Double = .zero {
    didSet {
        objectWillChange.send()
    }
}

private let locationManager: CLLocationManager

override init() {
    self.locationManager = CLLocationManager()
    super.init()
    
    self.locationManager.delegate = self
    self.setup()
}

private func setup() {
    self.locationManager.requestWhenInUseAuthorization()
    
    if CLLocationManager.headingAvailable() {
        self.locationManager.startUpdatingHeading()
    }
}

func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
    self.degrees = -1 * newHeading.magneticHeading
}
}

struct ContentView: View {

@ObservedObject var compassHeading = CompassHeading()

var body: some View {
    
    VStack {
        ScrollView {
            Text("Some words\nSome words\nSome words\n")
                .padding()
        }
        
        Text("⬆️")
            .font(.system(size: 100))
            .rotationEffect(Angle(degrees: compassHeading.degrees))
    }
    
}

}

swiftui scrollview compass
© www.soinside.com 2019 - 2024. All rights reserved.