【发布时间】: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