SwiftUI-APP 布局

在这里插入图片描述

引言

SwiftUI应用下的APP,是我非常期待的技术; 尽管现在Flutter已如火如荼,如日中天!毫不掩饰的表达,我现在使用的跨平台技术是React-Native。到目前为止,从开始学习到目前仅仅使用了一年零2个月的时间。与目前火热的跨平台技术一比较,我滴乖乖,眼看就要凉凉! 没办法,需要花点时间学习另一门新的技术了。从市面上来看,虽然现在在技术上几乎每个人都在大肆的宣扬Flutter多么多么好。但是,我还是想要去学习目前还不够热门的技术 —— SwiftUI
我选择SwiftUI的原因很简单,自学Swift语言已有半年时间,通过SwiftUI技术能够更强化和深入理解swift语言和iOS开发的技术。本身我作为Android技术开发人员,但看到swift语言之后,却深深被她的魅力所吸引。

SwiftUI并非跨平台的技术,至少不能用她写Android。

技术

SwfitUI我们知道是和Google的Flutter一样的跨平台APP的技术。学习她、研究她需要一个过程。那么这么一个过程,我打算从布局 开始。

开启一个项目

在这里插入图片描述
点击下载Xcode 11 beta 3 之后安装,创建新的项目 —— shift + commend + N
当前macOS系统版本和Xcode版本如上图。对于Xcode 11 beta 3 在编写SwiftUI时实时展示UI,仅支持macOS系统版本在 macOS 10.15 later 否则,无法显示实时的UI。
在这里插入图片描述
但目前为止,我的电脑还没有推送更新最新系统版本macOS10.15的消息。虽然很多人更新到了,他们使用了别的方式——先在Apple开发者种子计划中注册

布局后的效果展示

在这里插入图片描述
效果图源码在这里,
在这里插入图片描述


TopAssets.swift

import SwiftUI

struct TopAssets : View {
    var body: some View {
        VStack{
            ZStack {
                Image("bg_wallet_top").resizable().frame(height: 160) //背景图
                VStack(alignment: .leading){
                    HStack{
                        Image("default_avater_female") //头像
                            .resizable()
                            .frame(width:50, height:50)
                            .clipShape(Circle())
                            .overlay(Circle().stroke(Color.white, lineWidth: 1))
                            .shadow(radius: 1).padding(EdgeInsets(top: 0, leading: 10, bottom: 0,trailing: 0))
                        
                        VStack(alignment: .leading){
                            //用户名
                            Text("王者荣耀").color(.white).font(.system(size: 16)).padding(EdgeInsets(top: 0, leading: 10, bottom: 0, trailing: 0))
                            //资产信息
                            Text("资产=$200.68").color(.white).font(.system(size: 16)).padding(EdgeInsets(top: 0, leading: 10, bottom: 0, trailing: 0))
                        }
                        
                    Spacer()
                    }.frame(height:55).border(Color.white, width: 1, cornerRadius: 6).offset(y:-30)
                }
                
            }.frame(height:160).border(Color.green, width: 2, cornerRadius: 1)
        }
        
    }
}

#if DEBUG
struct TopAssets_Previews : PreviewProvider {
    static var previews: some View {
        TopAssets()
    }
}
#endif

ButtonItem.swift

import SwiftUI

struct ButtonItem : View {
    var body: some View {
        VStack{
            HStack(alignment: .center){
                ///数字货币图标
                Image("ic_wallet_uto").resizable().frame(width:30, height:30)
                Text("UTO").bold().color(.gray).font(.system(size: 20)) //货币名称
                Spacer()
                VStack(alignment: .trailing){
                    Text("$109.78").bold().color(.gray).font(.system(size: 14)) //美元金额
                    Text("¥59.63").bold().color(.gray).font(.system(size: 14)) //rmb金额
                }
            }
            .frame(height:45)
                .border(Color.gray,
                        width: 1,
                        cornerRadius: 5)
                .padding(EdgeInsets(top: 0, leading: 15, bottom: 0, trailing: 15))
            
            HStack(alignment: .center){
                Image("ic_wallet_eth").resizable().frame(width:30, height:30)
                Text("ETH").bold().color(.gray).font(.system(size: 20))
                Spacer()
                VStack(alignment: .trailing){
                    Text("$139.46").bold().color(.gray).font(.system(size: 14))
                    Text("¥798.52").bold().color(.gray).font(.system(size: 14))
                }
            }
            .frame(height:45)
                .border(Color.gray,
                        width: 1,
                        cornerRadius: 5)
                .padding(EdgeInsets(top: 0, leading: 15, bottom: 0, trailing: 15))
        }
        
    }
}

#if DEBUG
struct ButtonItem_Previews : PreviewProvider {
    static var previews: some View {
        ButtonItem()
    }
}
#endif

组件属性补充:

查看源码:长按 commend + 点击
在这里插入图片描述

组件HStack VStack ZStack

然后从源码中可以看到
HStack 官方解释: A view that arranges its children in a vertical line.
VStack 官方解释: A view that arranges its children in a horizontal line.
ZStack 官方解释: A view that overlays its children, aligning them in both axes.

从其中一个 HStack 做分析,查看源码
在这里插入图片描述
查看他们的源码可以发现其中一个特点,竖直方向排序的View,从构造方法init来看参数VerticalAlignmentspacing
参数VerticalAlignment ,说明智能调整对齐方式且与排序方向垂直。
参数spacing,表示对子view排序的view之间的距离。
参数content,(挂尾)闭包。子view的内容就由它而来!

组件Text

从我浅浅的水平看,去查看源码,找view的属性。一般从两点:

方式一,原始属性

在这里插入图片描述

方式二,扩展属性

在这里插入图片描述

方式三,继承来的属性

在这里插入图片描述
从源码来看,Text展示的文字内容就来自这里的init的了。
在这里插入图片描述
设置字体属性,比如 字体颜色、字体大小、粗度、字体样式、下划线等等!以下截图部分用来证明上面文字描述。
在这里插入图片描述

组件Image

上面布局样式,图片展示则是使用组件Image的构造方法
在这里插入图片描述
其中源码中有一个比较重要的方法,用户调整图片的适配。
public func resizable(capInsets: EdgeInsets = EdgeInsets(), resizingMode: Image.ResizingMode = .stretch) -> Image
在这里插入图片描述
而且还有一些特别的方法,设置图片为圆形。源码里是这么描述的,还给我用了注释。
在这里插入图片描述
而且还有一些特别的方法,设置图片为圆角。源码里是这么描述的,还给我用了注释。
在这里插入图片描述
当然除了Image的原始属性,还有继承自View而得来的属性。源码中说了
在这里插入图片描述
然后呢就能在 extension View 中找到很多有用的
在这里插入图片描述
因此可以看到很多好用的属性为我们提供
在这里插入图片描述

【课程特点】1、231节大容量课程:包含了SwiftUI的大部分知识点,详细讲解SwiftUI的方方面面;2、15个超级精彩的实例:包含美食、理财、健身、教育、电子商务等各行业的App实例;3、创新的教学模式:手把手教您SwiftUI用户界面开发技术,一看就懂,一学就会;4、贴心的操作提示:让您的眼睛始终处于操作的焦点位置,不用再满屏找光标;5、语言简洁精练:瞄准问题的核心所在,减少对思维的干扰,并节省您宝贵的时间;6、视频短小精悍:即方便于您的学习和记忆,也方便日后对功能的检索;7、齐全的学习资料:提供所有课程的源码,在Xcode 11 + iOS 13环境下测试通过; 更好的应用,更少的代码!SwiftUI是苹果主推的下一代用户界面搭建技术,具有声明式语法、实时生成界面预览等特性,可以为苹果手机、苹果平板、苹果电脑、苹果电视、苹果手表五个平台搭建统一的用户界面。SwiftUI是一种创新、简单的iOS开发中的界面布局方案,可以通过Swift语言的强大功能,在所有的Apple平台上快速构建用户界面。 仅使用一组工具和API为任何Apple设备构建用户界面。SwiftUI具有易于阅读和自然编写的声明式Swift语法,可与新的Xcode设计工具无缝协作,使您的代码和设计**同步。自动支持动态类型、暗黑模式、本地化和可访问性,意味着您的**行SwiftUI代码已经是您编写过的非常强大的UI代码了。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值