【问题标题】:What is the image size limitation for ScrollView in SwiftUI?SwiftUI 中 ScrollView 的图像大小限制是多少?
【发布时间】: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
        }))
        }
    }
}

【问题讨论】:

    标签: image swiftui scrollview


    【解决方案1】:

    尝试添加到图像:

    .renderingMode(.original)
    

    就在之前

    .resizable()
    

    【讨论】:

    • 它仍然是空白的并且没有控制台错误。
    • 尝试删除“.resizable()”
    • 更新。删除“.resizable()”允许我在 macos(催化剂)中显示我的大图像。但是在我的 iPhone 10 上它崩溃了。也许这对小东西来说太过分了。
    • 我可以在 Swift 中很好地显示它,但是使用 SwiftUI,我仍然会得到一个白屏,不管有没有 .resizable()。谢谢。
    猜你喜欢
    • 2012-09-20
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    相关资源
    最近更新 更多