缩放背景时 Swiftui 尺寸图像保持不变
Swiftui size images remains the same when zoom background
我正在使用以下存储库的一部分:https://github.com/pd95/CS193p-EmojiArt
已经修改了一些代码,因为我使用的是图像而不是表情符号,但是我无法弄清楚大小部分。
表情符号的宽度和高度使用相同的尺寸,但对于我的图像,我使用不同的宽度和高度(所有图像具有相同的宽度和高度)。
当我缩放页面时,图像没有调整大小。
从提到的 repo 中,我没有更改大小部分和缩放部分。
有人知道我该如何解决这个问题吗?
使用示例代码更新
大小设置为整数:
var size: Int
有一个scaleInstruments函数:
func scaleInstrument(_ instrument: StageManager.Instrument, by scale: CGFloat) {
if let index = stageManager.instruments.firstIndex(matching: instrument) {
stageManager.instruments[index].size = Int((CGFloat(stageManager.instruments[index].size) * scale).rounded(.toNearestOrEven))
}
}
以及 zoomScale / zoomGesture 函数:
@GestureState private var gestureZoomScale: CGFloat = 1.0
private var zoomScale: CGFloat {
document.steadyStateZoomScale * (hasSelection ? 1 : gestureZoomScale)
}
private func zoomScale(for instrument: StageManager.Instrument) -> CGFloat {
if isInstrumentSelected(instrument) {
return document.steadyStateZoomScale * gestureZoomScale
}
else {
return zoomScale
}
}
private func zoomGesture() -> some Gesture {
MagnificationGesture()
.updating($gestureZoomScale, body: { (latestGestureScale, gestureZoomScale, transaction) in
gestureZoomScale = latestGestureScale
})
.onEnded { finalGestureScale in
if self.hasSelection {
self.selectedInstrumentIDs.forEach { (instrumentId) in
if let instrument = self.document.instruments.first(where: {[=12=].id == instrumentId }) {
self.document.scaleInstrument(instrument, by: finalGestureScale)
}
}
}
else {
self.document.steadyStateZoomScale *= finalGestureScale
}
}
}
希望这足以解释我遇到的问题。
我设法做到了这一点,使用以下代码更改:
发件人:
.frame(width: 140, height: 70)
收件人:
.frame(width: 140 * self.zoomScale(for: instrument), height: 70 * self.zoomScale(for: instrument))
现在图像将根据缩放比例调整大小。
我正在使用以下存储库的一部分:https://github.com/pd95/CS193p-EmojiArt 已经修改了一些代码,因为我使用的是图像而不是表情符号,但是我无法弄清楚大小部分。
表情符号的宽度和高度使用相同的尺寸,但对于我的图像,我使用不同的宽度和高度(所有图像具有相同的宽度和高度)。
当我缩放页面时,图像没有调整大小。
从提到的 repo 中,我没有更改大小部分和缩放部分。
有人知道我该如何解决这个问题吗?
使用示例代码更新
大小设置为整数:
var size: Int
有一个scaleInstruments函数:
func scaleInstrument(_ instrument: StageManager.Instrument, by scale: CGFloat) {
if let index = stageManager.instruments.firstIndex(matching: instrument) {
stageManager.instruments[index].size = Int((CGFloat(stageManager.instruments[index].size) * scale).rounded(.toNearestOrEven))
}
}
以及 zoomScale / zoomGesture 函数:
@GestureState private var gestureZoomScale: CGFloat = 1.0
private var zoomScale: CGFloat {
document.steadyStateZoomScale * (hasSelection ? 1 : gestureZoomScale)
}
private func zoomScale(for instrument: StageManager.Instrument) -> CGFloat {
if isInstrumentSelected(instrument) {
return document.steadyStateZoomScale * gestureZoomScale
}
else {
return zoomScale
}
}
private func zoomGesture() -> some Gesture {
MagnificationGesture()
.updating($gestureZoomScale, body: { (latestGestureScale, gestureZoomScale, transaction) in
gestureZoomScale = latestGestureScale
})
.onEnded { finalGestureScale in
if self.hasSelection {
self.selectedInstrumentIDs.forEach { (instrumentId) in
if let instrument = self.document.instruments.first(where: {[=12=].id == instrumentId }) {
self.document.scaleInstrument(instrument, by: finalGestureScale)
}
}
}
else {
self.document.steadyStateZoomScale *= finalGestureScale
}
}
}
希望这足以解释我遇到的问题。
我设法做到了这一点,使用以下代码更改:
发件人:
.frame(width: 140, height: 70)
收件人:
.frame(width: 140 * self.zoomScale(for: instrument), height: 70 * self.zoomScale(for: instrument))
现在图像将根据缩放比例调整大小。