Я делаю какое-то приложение, которое поддерживает слайдер с одним касанием ручки!
В любом случае, когда я делаю это приложение, я почти проверил результат моего кода для предварительного просмотра Xcode, который является самым мощнымособенность SwiftUI.
Но когда я пытаюсь запустить свое приложение напрямую (будь то симулятор или реальное устройство), приложение буквально отличается, и я не знаю, ПОЧЕМУ!
Вот мой почти весь исходный код (извините за неудобство, если вы чувствуете, но я думаю, что это шанс полностью запустить мой крошечный проект, и, возможно, это лучше, чем писать код частично и описывать много раз ...)
import SwiftUI
struct ContentView: View {
@State var centerContent = CGPoint()
@GestureState var dragAmount = CGPoint.zero
@State var currentPoint = CGPoint.zero
@State var atan2Current: CGFloat = 0.0
var body: some View {
VStack {
ZStack {
UserTouchCircle(center: $centerContent, atan2: $atan2Current)
.frame(width: UIScreen.main.bounds.width * 0.85, height: UIScreen.main.bounds.width * 0.85)
Circle()
.frame(width: UIScreen.main.bounds.width * 0.9, height: UIScreen.main.bounds.width * 0.9)
.foregroundColor(Color.red.opacity(0.5))
.gesture(DragGesture().updating(self.$dragAmount) { value, state, transaction in
state = value.location
self.currentPoint = CGPoint(x: self.dragAmount.x - self.centerContent.x, y: self.centerContent.y - self.dragAmount.y)
self.atan2Current = atan2(self.dragAmount.x - self.centerContent.x, self.centerContent.y - self.dragAmount.y)
})
}
}
}
}
struct UserTouchCircle: View {
@Binding var center: CGPoint
@Binding var atan2: CGFloat
var body: some View {
GeometryReader { geometry in
Path { path in
self.center = CGPoint(x: geometry.size.width / 2, y: geometry.size.height / 2)
path.move(to: self.center)
path.addArc(center: self.center, radius: UIScreen.main.bounds.width * 0.40, startAngle: .degrees(-90), endAngle: .degrees(self.atan2ToDegrees(tan: self.atan2)), clockwise: false)
}
}
}
func atan2ToDegrees(tan: CGFloat) -> Double {
if tan > 0 {
return (Double(tan) * (180 / Double.pi) - 90)
} else {
return (Double(tan) * (180 / Double.pi) + 270)
}
}
}
Когда я запускаю свое приложение на устройстве, Xcode отображает ниже в строке self.currentPoint = CGPoint(x: self.dragAmount.x - self.centerContent.x, y: self.centerContent.y - self.dragAmount.y)
, self.atan2Current = atan2(self.dragAmount.x - self.centerContent.x, self.centerContent.y - self.dragAmount.y)
и self.center = CGPoint(x: geometry.size.width / 2, y: geometry.size.height / 2)
.
Изменение состояния во время обновления представления, это приведет к неопределенному поведению.
Я знаю, почему это произошло (фраза Xcode), но разница между предварительным просмотром и реальным устройством.
Как я могу решить эту проблему? пожалуйста помогите.
спасибо.