CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

SwiftUI2.0:开发者热切盼望的版本带来了哪些新功能?-永久免费的源码丞旭猿

全文共2274字,预计学习时长14分钟

图源:unsplash

很多人翘首以盼的SwiftUI 2.0在WWDC 2020中诞生了。不出所料,苹果在主题演讲结束时对SwiftUI进行了一些全新的API更新,这些新改进本质上是附加的,没有任何违背或更改会破坏旧的13个SwiftUI代码库。

本文就将带你一览iOS14新发布的SwiftUI控件。你需要一个Xcode 12 beta(最低要求macOS版本为10.15.4)来运行新的SwiftUI控件。让我们开始吧!

新的SwiftUI应用程序起点

截至目前,我们必须使用AppDelegates和SceneDelegates设置第一个SwiftUI视图。Swift 5.3引入了一个基于类型的程序入口点,可以使用@main属性进行设置,而最新的SwiftUI迭代则巧妙地利用了这一点。

Xcode 12新项目

SwiftUI现在提供了在应用程序启动时调用的以下结构:

@mainstructWhatsNewiOS14SwiftUIApp:App{varbody:some Scene{WindowGroup{ContentView()}}}

WindowGroup是其中的一个场景属性,我们可以定义起始视图层次结构。在WindowGroup计算属性内设置TabView、NavigationViews或者App Clip。

SwiftUI:LazyVStack和LazyHStack

以前,SwiftUI视图用于立即加载,这导致在填充大量数据时会出现性能和内存问题。在SwiftUI的第一次迭代中,NavigationLink的目的地视图也用于预先加载内容。

这一次,苹果推出了新的惰性水平堆栈视图和垂直堆栈视图,它将在你需要时加载内容,有助于SwiftUI的性能优化。现在SwiftUI列表中也引入了延迟加载。

来看这个实际运行的SwiftUI LazyHStack的示例:

struct ContentView:view{varbody:some View {
                                ScrollView(.horizontal){
                                          LazyHStack(spacing:10) {
                        ForEach(0 .. <1000){indexin
                        Text( \(index)).framewidth:100,height:200).borderColor.gray.opacity(0.5),width:0.5).backgroundColor.blue.cornerRadius(6)
                                        }
                                    }.padding.leading,10)
                                }
                            }
                        }

SwiftUI滚动视图位置

由于功能有限,第一个版本的Swift UI在ScrollView前端受到了很大的影响。iOS 14的SwiftUI提供了急需的ScrollViewReader和ScrollViewProxy来捕获滚动视图的偏移位置,并通过程序对其进行移动。

我们可以将视图嵌入到ScrollViewReader中,并按以下任一方式使用scrollTo方法:

scrollView.scrollTo(viewId)// orscrollView.scrollTo(viewId,anchor:.center)

默认情况下,滚动视图的位置设置为视图的顶部,可使用anchor属性来完善它。例如,在下面的代码中,将anchor属性设置为居中时,滚动位置看起来比设置为leading时要好得多。

Swift UI ProgressView

以前,我们必须利用Swift UI Shapes来复制线性ProgressView和UIViewRepresentable,以便在SwiftUI中创建ActivityIndicator。现在,在iOS 14的SwiftUI中,ProgressView具有本机支持功能。

默认的ProgressView()会创建一个不确定的UIActivityIndicator(类似于进度加载器),而下面的代码在Swift UI中创建一个线性的ProgressView:

ProgressView( Text,value:10,total:100)

使用progress View Style进一步自定义Progress View,progress View Style接受内置的Circular Progress ViewStyle和Default Progress ViewStyle,还可以创建自定义修饰符。

Accent Color用于在Progress View中设置文本颜色,而foreground Color则用作设置色调。

Swift UI Labels,Links, and Color Pickers

图源:unsplash

在最新的SwiftUI迭代中,Labels是急需被添加的。他们允许你使用以下代码在文本旁边设置图标:

LabelSwiftUI2.0systemImagecheckmark.icloud

在图标属性内,可以设置SF符号,图像资产或自定义SwiftUI形状。

SwiftUI Link是另一个很酷的UI控件,它为导航到URL提供了内置支持:

Link("Click me",destination:URL(string: "your_url")!)

如果是通用链接,则该链接将重定向到网络浏览器或者关联的应用程序。

SwiftUI工具库的另一个重要功能是包含了一个原生的ColorPickerUI控件。你可以使用状态属性包装器来更新用户选择的颜色。

ColorPicker("Sample Picker",selection: $myColor)

SwiftUI TextEditor,MapKit,Sign In With Apple

上次被省略的多行可滚动UITextViews现在原生包含在SwiftUI中,被称为TextEditor。

TextEditor(text:$ stateProperty)

MapKit必须通过包装在UIViewRepresentable中嵌入到SwiftUI中,现在已被本地添加。我们可以直接从SwiftUI的视图界面本身传递MKCoordinateRegion,显示用户位置以及其他内容:

Map(mapRect:interactionModes:showsUserLocation:userTrackingMode:

现在,SignInWithAppleButton已进入SwiftUI的内置控件中。要设置按钮,只需实例化结构并将标签参数设置为.signUp或.signIn即可指示授权类型。

新的onChange修饰符用于侦听状态更改

onChange是一个新的视图修改器,可在所有SwiftUI视图中使用。它使你可以侦听状态的更改并相应地对视图执行操作。例如,由于附加了onChanged修饰符,可以切换Button状态更改并触发TextEditor清除,如下所示:

importSwiftUI
                  struct ContentView:view{@StatevarcurrentText:String=Hi How are you?@StatevarclearText:Bool =falsevarbody:some View {
                  VStack {
                  TextEditor(text:$ currentText)
                      .onChange(of:clearText){valueinifclearText { 
                      currentText =
                                          }
                                      }
                                 
                      Button(action:{clearText =true},label:{
                      Text(Clear TextEditor)
                                  })
                              }
                          }
                      }

注意,实例化SwiftUI的主体时,clearText状态属性会自动触发onChange修饰符。

SwiftUI TabView为页面控件带来新风格

图源:unsplash

UIPageViewController功能是在上次加入SwiftUI的。在iOS 14迭代中,TabView引入了一种新样式,可让你在SwiftUI视图中嵌入可滑动页面控件。只需在.tabViewStyle()修饰符中设置PageTabViewStyle(),如下所示:

importSwiftUIstructContentViewview{letcolors: [Color] = [.red, .green,.yellow, .blue]varbody:someView{TabView{ForEach0.. <6){ indexinText("Tab \(index)")
                      .font(.title)
                      .frame(maxWidth:.infinity,maxHeight:.infinity)
                      .background(colors [colors[index%colors.count])
                      .cornerRadius(8)
                                          }
                      } .tabViewStyle(PageTabViewStyle())
                          }
                      }

这是在Xcode 12上使用的代码屏幕截图:

SwiftUI网格

iOS 14 SwiftUI中再次略过了CollectionView和Compositional Layouts,但这并不能阻止Apple为基于网格的布局引入新的容器,它让你可以在LazyHGrid或LazyVGrid中设置子视图。

SwiftUI网格的每个元素都是一个GridItem。可以设置GridItem的对齐方式,间距和大小。在以下代码中,在SwiftUI中创建了垂直网格布局,该布局由三列组成:

structContentViewview{letcolors: [Color] = [.red, .green,.yellow, .blue]varcolumns: [GridItem] =Array(repeating: .init(.flexible(), alignment: .center),count:3)varbody:someView{ScrollView{LazyVGrid(columns: columns, spacing:10) {ForEach0...100,id:\ .self){indexinText("Tab \(index)")
                        .frame(width:110, height:200)
                        .background(colors [colors[index%colors.count])
                        .cornerRadius(8)
                                        }
                                    }
                                }
                            }
                        }

仅用几行代码就为iOS 14在SwiftUI中构建了可自定义的网格布局!

SwiftUI的更新给了我们很多惊喜:SwiftUI的OutlineGroups和VideoPlayer是很有前景的新功能,SwiftUI 视图构建器现在也能支持if let和switch语句了。除此之外,还有更多值得期待的地方需要你去慢慢探索。

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

声明:本文部分素材转载自互联网,如有侵权立即删除 。

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容