SwiftUI — жест перетаскивания блокирует жест прокрутки только на iPhone 11IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 SwiftUI — жест перетаскивания блокирует жест прокрутки только на iPhone 11

Сообщение Anonymous »

Я новичок в Swift и SwiftUI. Я создаю свое первое приложение для сортировки галереи с некоторыми дополнительными функциями.
Я использовал свой iPhone для тестирования и только начал тестировать свое приложение на других продуктах Apple.
Все работает нормально на iPad Air M1, iPhone 15 Pro, iPhone 15 Pro Max, iPhone 13, iPhone XS (симулятор) и iPhone 11 Pro (симулятор). Однако когда я попытался показать свое приложение члену семьи на iPhone 11, я столкнулся с проблемой.
Описание проблемы:Мое приложение берет все фотографии из встроенной галереи iPhone, затем вы можете отсортировать их с помощью специальных фильтров и удалить изображения. Просто похоже на родную галерею. (При необходимости я могу добавить фотографии позже) Вы можете просто прокручивать галерею, проводя пальцем вверх и вниз. Вы можете нажать кнопку выбора и начать выбирать изображения для удаления.
Недавно я добавил функцию перетаскивания нескольких изображений для выбора. Это делает его более похожим на родной интерфейс iOS, устраняя необходимость нажимать на каждое изображение по отдельности.
Однако на iPhone 11 в тот момент, когда вы открываете приложение, вы не можете прокручивать . Прокрутка полностью заблокирована. Вы по-прежнему можете выбирать изображения, нажимая или перетаскивая их, так что это не проблема сенсорной области. Та же проблема сохраняется и в симуляторе iPhone 11.
И я думаю, что нашел проблемную часть в своем (к сожалению, беспорядочном) файле ContentView.swift;

Код: Выделить всё

    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")
}
вы можете увидеть часть .gesture(..... Я понял, что этот DragGesture и ScrollView блокируют друг друга (почему-то только на iPhone 11)
highPriorityGesture также не будет работать.
Когда я меняю его с помощью одновременных жестов, прокрутка снова начинает работать.
  • НО - поскольку это одновременно, когда несколько активирован режим выбора, когда я перетаскиваю палец, галерея также начинает прокручиваться, и это становится очень неприятным занятием. После этой проблемы я понял, что в родной галерее iOS блокируется прокрутка, когда вы перетаскиваете для множественного выбора, и просто когда вы отпускаете палец. вы можете прокрутить еще раз, даже если активен режим множественного выбора.
Я попробовал миллион вещей, спрашивал Клода, чатгпт и т. д. и т. п.
Нашел несколько похожих проблем в stackoverflow, но они были все относится к iOS 18, а не только к iPhone. Мое приложение отлично работает на iOS 18 (15 Pro Max).
Жест перетаскивания iOS 18 блокирует просмотр прокрутки.
Вот некоторые из вещей, которые я пробовал:
совместное использование highPriorityGesture и одновременного жеста,
пробовал ненадолго заблокировать прокрутку во время перетаскивания,
реализовать очень сложные версии этих вещи с помощью claude,
попробуйте проверить, истинно ли isSelectionMode или нет.
Все они сломали другие вещи/не будут работать.
Наверное, мне не хватает чего-то довольно простого; но iPhone 11, являющийся единственным проблемным устройством, меня смущает. Я не хочу слишком сильно портить свою и без того хрупкую логику.

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • SwiftUI — жест перетаскивания блокирует жест прокрутки только на iPhone 11
    Anonymous » » в форуме IOS
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Жест перетаскивания Android: можно ли иметь события в начале перетаскивания во время перетаскивания?
    Anonymous » » в форуме Android
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Жест SwiftUI блокирует UITouch
    Anonymous » » в форуме IOS
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • RealityView ios 18 Как точно переместить сущность, используя жест перетаскивания
    Anonymous » » в форуме IOS
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Приложение Java Swing блокирует фокус и блокирует ввод мыши в других приложениях после взаимодействия с полями редактиро
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous

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