Swiftui - Жестные блоки жеста перетаскивают только на iPhone 11IOS

Программируем под IOS
Ответить
Anonymous
 Swiftui - Жестные блоки жеста перетаскивают только на iPhone 11

Сообщение Anonymous »

Я довольно новичок в Swift и Swiftui. Я делаю свое первое приложение для сортировки галереи с некоторыми дополнительными функциями.
Все отлично работает на iPad Air M1, iPhone 15 Pro, iPhone 15 Pro Max, iPhone 13, iPhone XS (Simulator) и iPhone 11 Pro (Simulator). Однако, когда я попытался показать свое приложение члену семьи с iPhone 11, я наткнулся на проблему. Br /> Мое приложение делает все фотографии из нативной галереи iPhone, затем вы можете сортировать его по некоторым фильтрам Specific и удаляете изображения. Это просто похоже на местную галерею. (Я могу добавить фотографии позже, если это необходимо) Вы можете просто прокрутить галерею, пройдя вверх и вниз. Вы можете нажать кнопку «Выбрать» и начать выбрать изображения для удаления. Это делает его более похожим на нативный опыт iOS, устраняя необходимость нажимать на каждую картину индивидуально. Полем Прокрутка полностью заблокирована. Вы все еще можете выбрать изображения, постукивая или перетаскивая, так что это не проблема с ощущениями. Та же самая проблема сохраняется на симуляторе iPhone 11. < /P>
И я думаю, что я нашел проблемную часть в моем (печально грязном) contentView.swift file; < /p>
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>
Вы можете увидеть .gesture (.... Часть. Я понял, что это перетаскивание и прокрутки блокируют друг друга (каким -то образом только на iPhone 11) < /p>
< P> HighPrioritySture также не будет работать. > Но - поскольку он одновременный, когда режим множественного выбора активируется, когда я перетаскиваю галерею пальцев, также начинает прокручивать, и он становится очень неприятным опытом. Несколько выборов и только когда вы отпускаете пальцем, вы можете снова прокрутить, даже если режим множественного выбора активен. < /li>
< /ul>
Я попробовал миллион вещей, спросил Клод, CHATGPT и т. Д. /p>
ios 18 Блоки жестов перетаскивания Scrollview < /p>
Вот некоторые из вещей, которые я пробовал:
Использование высокоприоритетных и одновременных. Br /> попытался кратко заблокировать прокрутку во время перетаскивания,
реализовать много сложных версий этих вещей с помощью Claude,
попробуйте проверить, правда ли IsseLectionMode или нет < /p>
Все они сломали другие вещи/не сработают. Но iPhone 11 является единственным проблемным устройством, меня смущает. Я не хочу слишком много смущать с моей и без того хрупкой логикой.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -iphone-11
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»