SwiftUI: использование LongPressGesture для отображения контекстного меню, похожего на PinterestIOS

Программируем под IOS
Ответить
Anonymous
 SwiftUI: использование LongPressGesture для отображения контекстного меню, похожего на Pinterest

Сообщение Anonymous »

Я пытаюсь создать контекстное меню, похожее на контекстное меню Pinterest в их приложении для iOS. Длительное нажатие на публикацию открывает вид с четырьмя кнопками, который, пока пользователь продолжает долгое нажатие, затем может перетаскивать и выбирать другие кнопки. Если вы отпустите долгое нажатие, вы либо выберете ту кнопку, которую вы в данный момент выбираете, либо вообще закроете меню, если у вас ничего не выбрано. См. пример ниже:
Изображение
< /p>
До сих пор я пробовал что-то похожее на документацию Apple здесь:
https://developer.apple.com/documentati ... essgesture
Но похоже, что жест завершается, как только он достигает минимальной длительности, определенной в жесте. Я бы хотел, чтобы этот жест продолжался до тех пор, пока пользователь удерживает его, и прекращался, как только он его отпускает.
Кроме того, я не в теме, когда дело доходит до перетаскивания. и выберите другие кнопки. Вот мой подход на данный момент:
struct Example: View {

@GestureState var isDetectingLongPress = false
@State var completedLongPress = false

var longPress: some Gesture {
LongPressGesture(minimumDuration: 3)
.updating($isDetectingLongPress) { currentState, gestureState,
transaction in
gestureState = currentState
transaction.animation = Animation.easeIn(duration: 2.0)
}
.onEnded { finished in
self.completedLongPress = finished
}
}

var body: some View {

HStack {

Spacer()
ZStack {
// Three button array to fan out when main button is being held
Button(action: {
// ToDo
}) {
Image(systemName: "circle.fill")
.frame(width: 70, height: 70)
.foregroundColor(.red)
}
.offset(x: self.isDetectingLongPress ? -90 : 0, y: self.isDetectingLongPress ? -90 : 0)
Button(action: {
// ToDo
}) {
Image(systemName: "circle.fill")
.frame(width: 70, height: 70)
.foregroundColor(.green)
}
.offset(x: 0, y: self.isDetectingLongPress ? -120 : 0)
Button(action: {
// ToDo
}) {
Image(systemName: "circle.fill")
.frame(width: 70, height: 70)
.foregroundColor(.blue)
}
.offset(x: self.isDetectingLongPress ? 90 : 0, y: self.isDetectingLongPress ? -90 : 0)

// Main button
Image(systemName: "largecircle.fill.circle")
.gesture(longPress)

}
Spacer()
}

}


Подробнее здесь: https://stackoverflow.com/questions/673 ... ntext-menu
Ответить

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

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

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

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

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