SwiftUI|SwiftUI 基础之Image使用和手势(2020更新含代码)
Image
显示图像的view
定义
@frozen struct Image
- 文档地址
基础使用 1、 显示图片
import SwiftUIstruct ContentView: View {
var body: some View {
Image("1")
}
}
效果
image.png 2、 自动适应大小
例子1的图片没有完全显示全,我们可以用Image的resizable()来让图片自动适应
struct ContentView: View {
var body: some View {
Image("1")
.resizable()
}
}
效果
文章图片
image.png 3. 保持原始比例
但是,这也可能导致图像的原始纵横比失真,因为它将在所有尺寸上拉伸所需的任何量以使其填充空间。
struct ContentView: View {
var body: some View {
Image("1")
.resizable()
.aspectRatio(contentMode: .fit)
}
}
文章图片
image.png 4. 点击放大
struct ContentView: View {
@State private var scale: CGFloat = 1.0var body: some View {
Image("1")
.resizable()
.aspectRatio(contentMode: .fit)
.scaleEffect(scale)
.gesture(
TapGesture()
.onEnded { _ in
self.scale += 0.1
print("\(self.scale)")
}
)
}
}
效果
Jietu20200101-220135.gif 5、手势放大
struct ContentView: View {
@State private var scale: CGFloat = 1.0var body: some View {
Image("1")
.resizable()
.aspectRatio(contentMode: .fit)
.scaleEffect(scale)
.gesture(MagnificationGesture()
.onChanged { value in
self.scale = value.magnitude
}
)
}
}
Jietu20200101-220918.gif 6、随手势移动
@GestureState private var dragOffset = CGSize.zero
@State private var position = CGSize.zero
var body: some View {
Image("1")
.font(.system(size: 100))
.offset(x: position.width + dragOffset.width, y: position.height + dragOffset.height)
.animation(.easeInOut)
.foregroundColor(.green)
.gesture(
DragGesture()
.updating($dragOffset, body: { (value, state, transaction) instate = value.translation
})
.onEnded({ (value) in
self.position.height += value.translation.height
self.position.width += value.translation.width
})
)}
6、完整拖拽缩放三个手势都支持
import SwiftUIstruct ContentView: View {
@GestureState private var dragOffset = CGSize.zero
@State private var position = CGSize.zero
@State private var scale: CGFloat = 1.0var body: some View {
Image("1")
.resizable()
.aspectRatio(contentMode: .fit)
.offset(x: position.width + dragOffset.width, y: position.height + dragOffset.height)
.animation(.easeInOut)
.scaleEffect(scale)// 缩放
.gesture(MagnificationGesture()
.onChanged { value in
self.scale = value.magnitude
}
)
// 拖拽
.gesture(
DragGesture()
.updating($dragOffset, body: { (value, state, transaction) instate = value.translation
})
.onEnded({ (value) in
self.position.height += value.translation.height
self.position.width += value.translation.width
})
)
//点击放大
.gesture(
TapGesture()
.onEnded { _ in
self.scale += 0.1
print("\(self.scale)")
}
)}
}
【SwiftUI|SwiftUI 基础之Image使用和手势(2020更新含代码)】效果
a.gif 参考资源
- https://www.appcoda.com/swiftui-gestures/
推荐阅读
- PMSJ寻平面设计师之现代(Hyundai)
- 太平之莲
- 闲杂“细雨”
- 七年之痒之后
- 深入理解Go之generate
- 由浅入深理解AOP
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 生活随笔|好天气下的意外之喜
- 感恩之旅第75天
- python学习之|python学习之 实现QQ自动发送消息