在谈GeometryReader前,咱们先聊一聊SwiftUI强大的布局魔法。在大多数状况下,SwiftUI在后台默默的帮咱们进行智能化的自动布局,让咱们编程生活变得更美好。
苹果的魔法布局保障了整个苹果生态圈的设计水准,但做为一个有创新想法的工匠,咱们有时候(其实大多时间)须要表现本身个性,但愿对界面布局进行更多的控制。这时候GeometryReader就被设计出来了。编程
下面我先来看看苹果官方的介绍:swift
一个能够根据其自身大小和坐标空间定义其内容的容器视图。
虽然苹果的介绍实在有些简单,可是与仅显示“无可用概述”的其余条目相比,咱们能够认为GeometryReader仍是挺幸福的!布局
苹果官方文档介绍虽然很简单,可是信息量却很大。首先Geometry居然也是个视图容器,神不神奇?原来名字如此复杂的GeometryReader与咱们经常使用的水平容器(HStack)、垂直容器(VStack)和组合容器(Group)都是一个类型。可是GeometryReader的优点在于他能够本身决定内容的大小与位置。ui
因为官方没有给出该关键词的中文名称,俺就本身其余起个名字吧,就叫几何容器。
接下来咱们来体验一下GeometryReader的强大吧,让咱们来作一个能够动的卡片效果吧spa
struct Thumbnail : View { var body : some View { VStack { HStack(spacing: 50) { ForEach(1..<8) { item in GeometryReader { geometry in Image("\(item)") .resizable() .aspectRatio(contentMode: .fit) .cornerRadius(10) .shadow(color: Color.gray, radius: 10, x: 0, y: 0) .rotation3DEffect(Angle(degrees: Double(geometry.frame(in: .global).minX - 20) / 40), axis: (x: 20, y: 20, z: 20)) } .frame(width: 370, height: 400) .padding(20) } } } } }
struct ContentView: View { var body: some View { VStack{ Spacer() Spacer() VStack{ Text("SwiftUI2020教程") .font(.largeTitle) .padding() Text("教程包括实时资讯和基础技能两部分") .font(.system(size: 22)) } VStack{ ScrollView(.horizontal, showsIndicators: false) { Thumbnail() } } Spacer() }.background( Image("back") .resizable() //.scaledToFit() ) } }
https://swiftui-lab.com/geometryreader-to-the-rescue/设计
http://xiaozhuanlan.com/icloudendcode
欢迎加入技术交流群
QQ:3365059189
SwiftUI技术交流QQ群:518696470blog