Wie kann ich die Höhe von Kinderartikeln mit einer Vergrößerungsgeste skalieren und gleichzeitig die Bildlaufposition in
Posted: 01 Mar 2025, 15:26
Ich versuche, eine Tageskalenderansicht zu erstellen, ähnlich der iOS -Kalender -App. In der App gibt es eine Funktion, in der Sie den Kalender einklemmen können, um die Entfernung zwischen den Stunden zu ändern. Da sich der Anker jedoch oben in der Bildlaufansicht befindet, werden alle Kinderartikel nach unten und außerhalb der Sicht gedrückt. Ich möchte, dass der Anker in der Mitte der Prise steht, so dass der Punkt, an dem der Benutzer einklemmt, sichtbar bleibt. < /P>
Aktuelles Verhalten:
beabsichtigtes Verhalten (IOS Calendar):
Code: Select all
import SwiftUI
final class HourItem: Identifiable {
let id: UUID
let hour: Int
init(hour: Int) {
self.id = UUID()
self.hour = hour
}
}
struct TestView: View {
let minHourHeight: CGFloat = 50
let maxHourHeight: CGFloat = 400
@State private var isZooming: Bool = false
@State private var previousZoomAmount: CGFloat = 0.0
@State private var currentZoomAmount: CGFloat = 0.0
private var zoomAmount: CGFloat {
1 + currentZoomAmount + previousZoomAmount
}
private var hourHeight: CGFloat {
100 * zoomAmount
}
private let currentTime: Date = Date.now
private let hourItems = (0.. CGFloat {
if hourHeight > maxHourHeight && newZoomAmount > currentZoomAmount {
return currentZoomAmount - 0.000001
} else if hourHeight < minHourHeight && newZoomAmount < currentZoomAmount {
return currentZoomAmount + 0.000001
}
return newZoomAmount
}
}
struct HourMarkView: View {
var hour: Int
var height: CGFloat
var currentTime: Date
var body: some View {
HStack(spacing: 10) {
Text(formatTime(hour))
.font(.caption)
.fontWeight(.medium)
.frame(width: 40, alignment: .trailing)
Rectangle()
.fill(Color.gray)
.frame(height: 1)
}
.frame(height: height)
.background(Color.white)
}
private func formatTime(_ hour: Int) -> String {
return String(format: "%02d:00", hour)
}
}
beabsichtigtes Verhalten (IOS Calendar):