SwiftUI 中 ScrollView 的图像大小限制是多少?
Posted
技术标签:
【中文标题】SwiftUI 中 ScrollView 的图像大小限制是多少?【英文标题】:What is the image size limitation for ScrollView in SwiftUI? 【发布时间】:2020-04-16 02:09:01 【问题描述】:我正在尝试为大小为 30,000 x 1800 的大图像创建可滚动的图像。当我将图像添加到资产并在 ContentView 中引用它时,什么都没有显示。较小的图像 (640 x 480) 显示并可滚动。
代码如下:
struct ContentView: View
@State var scale: CGFloat = 1.0
@State var isTapped: Bool = false
@State var pointTapped: CGPoint = CGPoint.zero
@State var draggedSize: CGSize = CGSize.zero
@State var previousDragged: CGSize = CGSize.zero
var body: some View
GeometryReader reader in
Image("scroll")
.resizable()
.scaledToFit()
.animation(.default)
.offset(x: self.draggedSize.width, y: 0)
.scaleEffect(self.scale)
.scaleEffect(self.isTapped ? 2 : 1, anchor: UnitPoint(x: self.pointTapped.x / reader.frame(in: .global).maxX, y: self.pointTapped.y / reader.frame(in: .global).maxY))
.gesture(TapGesture(count: 2)
.onEnded(
self.isTapped = !self.isTapped
).simultaneously(with: DragGesture(minimumDistance: 0, coordinateSpace: .global).onChanged( (value) in
self.pointTapped = value.startLocation
self.draggedSize = CGSize(width: value.translation.width + self.previousDragged.width, height: value.translation.height + self.previousDragged.height)
// print(value.startLocation)
).onEnded( (value) in
// print(value.location)
let offsetWidth = (reader.frame(in: .global).maxX * self.scale - reader.frame(in: .global).maxX) / 2
let newDraggedWidth = self.draggedSize.width * self.scale
if (newDraggedWidth > offsetWidth)
self.draggedSize = CGSize(width: offsetWidth / self.scale, height: value.translation.height + self.previousDragged.height)
else if (newDraggedWidth < -offsetWidth)
self.draggedSize = CGSize(width: -offsetWidth / self.scale, height: value.translation.height + self.previousDragged.height)
else
self.draggedSize = CGSize(width: value.translation.width + self.previousDragged.width, height: value.translation.height + self.previousDragged.height)
self.previousDragged = self.draggedSize
))).gesture(MagnificationGesture().onChanged( (scale) in
self.scale = scale.magnitude
).onEnded( (scaleFinal) in
self.scale = scaleFinal.magnitude
))
【问题讨论】:
【参考方案1】:尝试添加到图像:
.renderingMode(.original)
就在之前
.resizable()
【讨论】:
它仍然是空白的并且没有控制台错误。 尝试删除“.resizable()” 更新。删除“.resizable()”允许我在 macos(催化剂)中显示我的大图像。但是在我的 iPhone 10 上它崩溃了。也许这对小东西来说太过分了。 我可以在 Swift 中很好地显示它,但是使用 SwiftUI,我仍然会得到一个白屏,不管有没有 .resizable()。谢谢。以上是关于SwiftUI 中 ScrollView 的图像大小限制是多少?的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI 中 ScrollView 的图像大小限制是多少?
远程图像使用 List 正确加载,但在使用带有嵌入式 VStack 的 ScrollView 和 SwiftUI 时不加载