`LongPressGesture` не регистрируется на iOS 18

Я использую бета-версию Xcode 16 + iOS 18 по примеру Apple на LongPressGesture с:

import SwiftUI

struct LongPressGestureView: View {
    @GestureState private var isDetectingLongPress = false
    @State private var completedLongPress = false

    var body: some View {
        Circle()
            .fill(self.isDetectingLongPress ?
                Color.red :
                (self.completedLongPress ? Color.green : Color.blue))
            .frame(width: 100, height: 100, alignment: .center)
            .gesture(LongPressGesture(minimumDuration: 3)
                .onChanged { value in
                    print("onChanged: \(value)")
                }
                .updating($isDetectingLongPress) {
                    currentState, gestureState, transaction in
                    print("currentState: \(currentState)")
                    print("gestureState: \(gestureState)")
                    print("transaction: \(transaction)")
                    gestureState = currentState
                    transaction.animation = Animation.easeIn(duration: 2.0)
                }
                .onEnded { finished in
                    print("finished: \(finished)")
                    self.completedLongPress = finished
                })
    }
}

Предполагается, что круг анимируется от blue до red, а затем поворачивается green, когда закончит, но для меня это никогда не red. Я вижу, как он поворачивается green и печатает finished: true, когда заканчивается, но я никогда не вижу других операторов печати.

Это ошибка или я упускаю что-то очевидное?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не удалось заставить работать пример Apple, похоже, это старый код, который больше не работает.

Чтобы достичь того, чего вы хотите, вы можете попробовать этот подход:

struct ContentView: View {
    var body: some View {
        LongPressGestureView()
    }
}

struct LongPressGestureView: View {
    @State private var isDetectingLongPress = false
    @State private var completedLongPress = false
    
    var body: some View {
        Circle()
            .fill(isDetectingLongPress ? Color.red : (completedLongPress ? Color.green : Color.blue))
            .frame(width: 100, height: 100, alignment: .center)
            .onLongPressGesture(minimumDuration: 2) {
                completedLongPress = true
            } onPressingChanged: { inProgress in
                isDetectingLongPress = inProgress
            }
    }
}

Кажется, что если я хоть немного сдвину палец во время нажатия, жест не завершится. Ожидается ли это?

bli00 23.07.2024 09:07

Хорошо, попробуйте это .onLongPressGesture(minimumDuration: 2, maximumDistance: xxx) {...}, где вы можете выбратьxxx максимальное расстояние, на которое может переместиться взаимодействие, прежде чем жест не удастся.

workingdog support Ukraine 23.07.2024 09:34

Большой. Спасибо за вашу помощь :)

bli00 23.07.2024 09:41

Другие вопросы по теме

Swift 6: Ошибка: невозможно отправить изолированное значение задачи или актера
Странная ошибка: «Невозможно сформировать ключевой путь к основному свойству, изолированному актером…» в параллелизме Swift
Как добавить статические функции, использующие задачи, в расширениях Swift Task
Swift async/await реализует обновление с использованием задачи
Проблема бесконечного цикла со статическими операторами в расширениях Swift (цели обучения)
Формирование «UnsafeRawPointer» для переменной типа «[T]»; это, скорее всего, неверно, поскольку «T» может содержать ссылку на объект
Как показать строку текста массива в форме кривой в SwiftUI?
Замыкания в актерах: отправка «nonSendable» рискует вызвать гонку данных
Передача аргумента неотправляемого типа '(любой URLSessionTaskDelegate)?' вне основного контекста, изолированного от актера, может возникнуть гонка данных
Получение Невозможно найти спецификацию для FBReactNativeSpec, от которой зависит RNReanimated в проекте React Native

Похожие вопросы

Странная ошибка: «Невозможно сформировать ключевой путь к основному свойству, изолированному актером…» в параллелизме Swift
Есть ли способ установить идентификатор представления после перехода анимации?
Swift async/await реализует обновление с использованием задачи
Отклонение в App Store из-за рекомендации 5.1.2 — Проблемы с согласием AdMob и разрешениями на отслеживание в приложении Flutter
Передача аргумента неотправляемого типа '(любой URLSessionTaskDelegate)?' вне основного контекста, изолированного от актера, может возникнуть гонка данных
Использование CALayer.speed для завершения запуска анимации
Получение Невозможно найти спецификацию для FBReactNativeSpec, от которой зависит RNReanimated в проекте React Native
Создание дженериков с типом протокола делегата
Проблема с навигацией в Swiftui iOS 18, пропуск страницы
SwiftUI отслеживает и поддерживает положение прокрутки при вращении устройства