我剛剛開始編碼,這是我的第一個專案,我想分別拖動螢屏上設定的幾個影像并將它們留在拖動的位置。但是,目前我可以單獨管理拖動影像但又回到原來的位置......如果我想將每個影像留在被拖動的位置,我應該改變什么。
HStack {
ForEach(stickers) { sticker in
Image(sticker.name)
.resizable()
.frame(width: self.screenWidth*0.2, height: self.screenWidth*0.2)
.offset(x: self.selectedSticker == sticker ? self.dragOffset.width : 0,
y: self.selectedSticker == sticker ? self.dragOffset.height : 0)
.gesture(
DragGesture()
.updating(self.$dragOffset, body: { (value, state, transaction) in
if nil == self.selectedSticker {
self.selectedSticker = sticker
}
state = value.translation
}).onEnded { _ in self.selectedSticker = nil }
)
}
}
uj5u.com熱心網友回復:
似乎一旦sticker不再是selected.sticker,它的偏移量就會變為零。您需要設定一個變數來保存影像更新后的位置。
您也許可以添加另一個變數offset, 到Sticker:
struct Sticker: ... {
var offset = CGSize.zero
...
}
然后將每個貼紙的偏移值存盤sticker.offset在.onEnded:
HStack {
ForEach(stickers) { sticker in
Image(sticker.name)
.resizable()
.frame(width: self.screenWidth*0.2, height: self.screenWidth*0.2)
.offset(x: self.selectedSticker == sticker ? self.dragOffset.width : sticker.offset.width,
y: self.selectedSticker == sticker ? self.dragOffset.height : sticker.offset.height)
.gesture(
DragGesture()
.updating(self.$dragOffset, body: { (value, state, transaction) in
if nil == self.selectedSticker {
self.selectedSticker = sticker
}
state = value.translation
})
.onEnded { _ in
sticker.offset = dragOffset
self.selectedSticker = nil
}
)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/495104.html
