Ich bin ziemlich neu in Swift und Swiftui. Ich erstelle meine erste App, um eine Galerie mit einigen zusätzlichen Funktionen zu sortieren.
Alles funktioniert gut für iPad Air M1, iPhone 15 Pro, iPhone 15 Pro Max, iPhone 13, iPhone XS (Simulator) und iPhone 11 Pro (Simulator). Als ich jedoch versuchte, ein Familienmitglied mit einem iPhone 11 meine App zu zeigen, stieß ich auf ein Problem. BR /> Meine App macht alle Fotos aus der nativen Galerie des iPhone, dann können Sie sie nach einigen spesefischen Filtern sortieren und Bilder löschen. Es sieht einfach aus wie die einheimische Galerie. (Ich kann später bei Bedarf Fotos hinzufügen) Sie können die Galerie einfach durchsuchen, indem Sie auf und ab wischen. Sie können die Auswahltaste drücken und mit dem Löschen von Bildern beginnen. Dadurch fühlt es sich eher wie die native iOS -Erfahrung an und beseitigt die Notwendigkeit, jedes Bild einzeln zu tippen. . Das Scrollen ist vollständig verschlossen. Sie können weiterhin Bilder auswählen, indem Sie tippen oder schleppen, daher ist es kein Problem mit dem Berührungsbereich. Das gleiche Problem bleibt im iPhone 11 -Simulator bestehen. private var mediaGridView: some View {
ScrollView {
RefreshControl(coordinateSpace: .named("refresh")) {
await viewModel.refreshMediaItems()
}
LazyVGrid(columns: gridColumns, spacing: UIDevice.current.userInterfaceIdiom == .pad ? 12 : 4) {
let items = viewModel.filteredItems(typeFilter: mediaTypeFilter, specialFilter: specialFilter)
ForEach(Array(zip(items.indices, items)), id: \.1.id) { index, item in
MediaThumbnailView(
item: item,
isSelected: selectedItems.contains(item.id),
viewModel: viewModel,
onLongPress: {
if !isSelectionMode {
toggleSelectionMode()
selectedItems.insert(item.id)
}
},
onTap: {
if isSelectionMode {
toggleSelection(item: item)
} else {
viewModel.selectItem(item)
}
}
)
.aspectRatio(1, contentMode: .fit)
.background(
GeometryReader { geometry in
let frame = geometry.frame(in: .named("grid"))
Color.clear.preference(
key: ItemBoundsPreferenceKey.self,
value: [ItemBounds(id: item.id, bounds: frame, index: index)]
)
}
)
}
}
.padding(.horizontal, 2)
.coordinateSpace(name: "grid")
.onPreferenceChange(ItemBoundsPreferenceKey.self) { bounds in
itemBounds = Dictionary(uniqueKeysWithValues: bounds.map { ($0.id, $0) })
itemIndices = Dictionary(uniqueKeysWithValues: bounds.map { ($0.id, $0.index) })
}
.gesture(
DragGesture(minimumDistance: 0)
.onChanged { gesture in
if isSelectionMode {
let location = gesture.location
if !isDragging {
startDragging(at: location, in: itemBounds)
}
updateSelection(at: location, in: itemBounds)
}
}
.onEnded { _ in
endDragging()
}
)
}
.coordinateSpace(name: "refresh")
}
< /code>
Sie können die .sture (.... Teil. Ich habe festgestellt, dass sich diese Draggesture und Scrollview gegenseitig blockiert (irgendwie nur auf iPhone 11) < /p>
Hochprioritätsgesteuer funktioniert auch nicht. > Aber da es gleichzeitig ist, wenn der multiple Auswahlmodus aktiviert ist, beginnt ich, wenn ich meine Fingergalerie schleppte, und es wird zu einer sehr unangenehmen Erfahrung. Mehrfachauswahl und genau dann können Sie Ihren Finger wieder veröffentlichen, auch wenn der Mehrfachauswahlmodus aktiv ist. CHATGPT usw. usw. < /p>
Fand einige ähnliche Probleme bei Stackoverflow, aber sie waren alle mit iOS 18 verwandt, nicht spesifik für ein iPhone. /p>
iOS 18 Drag -Gestenblöcke Scrollview < /p>
Hier sind einige der Dinge, die ich ausprobiert habe:
Verwenden von HighPrioritygesture und gleichbedeutendem gemeinsam, < BR /> versucht, die Scrolle beim Ziehen kurz zu sperren,
Implementieren Sie viel komplizierte Versionen dieser Dinge mit Hilfe von Claude,
Versuchen Sie, zu überprüfen, ob isSelectionMode wahr ist oder nicht. Alle haben andere Dinge gebrochen/nicht funktionieren.
Wahrscheinlich gibt es etwas ziemlich Einfaches, das mir nur vermisse. Aber das iPhone 11 ist das einzelne problematische Gerät. Ich möchte nicht zu viel mit meiner bereits zerbrechlichen Logik durcheinander bringen.
Swiftui - Ziehen Sie Gestenblöcke Scroll Geste nur auf dem iPhone 11 ⇐ IOS
-
- Similar Topics
- Replies
- Views
- Last post