• 1000 *
Что не так / происходит прямо сейчас:
- Я нажимаю на представление смайликов, оно превращается go в набор выбранных смайлов, и на нем появляется рамка
- Я перетаскиваю вид эмодзи с помощью DragGesture, но он очень резкий и не перемещается на все расстояние перетаскивания
- Как только я завершу sh перетаскивание, граница исчезнет, даже если смайлик все еще в выбранном наборе смайликов
- Интересно, что если я перетащу смайлик прямо сейчас (когда он находится в наборе выбранных смайлов, но не имеет границы), он переместится на все расстояние перетаскивания, но без любые анимации (т.е. он просто переходит в то место, куда я его перетаскиваю)
Соответствующий код:
ForEach(self.document.emojis) { emoji in
Text(emoji.text)
.font(animatableWithSize: emoji.fontSize * self.zoomScale)
.border(Color.green.opacity(0.6), width: (self.document.selectedEmojis.contains(emoji) ? 4 : 0))
.gesture(self.emojiPanGesture().exclusively(before: TapGesture(count: 1).onEnded {
self.document.selectedEmojis.toggleMatching(emoji)
}))
.position(self.position(for: emoji, in: geometry.size))
.offset(self.document.selectedEmojis.contains(emoji) ? self.gestureEmojiPanOffset : .zero)
...
@GestureState private var gestureEmojiPanOffset: CGSize = .zero
private var emojiPanOffset: CGSize {
gestureEmojiPanOffset * zoomScale
}
private func emojiPanGesture() -> some Gesture {
return DragGesture()
.updating($gestureEmojiPanOffset) { latestDragGestureValue, gesturePanOffset, transaction in
gesturePanOffset = latestDragGestureValue.translation
}
.onEnded { finalDragGestureValue in
for emoji in self.document.selectedEmojis {
self.document.moveEmoji(emoji, by: finalDragGestureValue.translation)
}
}
}
Я думал проблема с тем, что смайлики не перемещаются на все расстояние перетаскивание могло быть связано с zoomScale, но я провел все свои тесты с zoomScale = 1. Есть идеи о том, что может происходить?
Дополнительно: если я поместил модификатор границы после модификатора жеста в ForEach l oop, я заметил, что граница появится вокруг всего представления, которое ForEach l oop находится внутри. Я понимаю, что порядок модификаторов часто имеет значение, но мне любопытно, почему модификатор жеста будет иметь такой эффект (в то время как другие модификаторы, такие как модификатор шрифта, не имеют).