Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Swift——SwiftUI(二) #149

Open
soapgu opened this issue Jun 29, 2022 · 0 comments
Open

Swift——SwiftUI(二) #149

soapgu opened this issue Jun 29, 2022 · 0 comments
Labels

Comments

@soapgu
Copy link
Owner

soapgu commented Jun 29, 2022

  • 序言

苹果官方的的教程弃了,主要觉得还是hackingwithswift讲得深入检出,官方的教程一对比就low很多,果断弃了。
一开始还是纯看教程为主,没有动手,弄了几天实在坚持不下去了。编码绝对是一门实践科学,必须理论实践合适配置,是3/7开还是5/5要看个人情况自生决定。
还是走的学习路线,由慢到快的原则,接下来还会选择一个长期playpen的项目作为长期练手项目

吐槽下,好久没碰mac,手生得不行,连快捷键都忘差不多了~~~

  • 学习要点

  • @State
    其实我在(一)里面已经讲过了,因为这次学习又有了不一样的体会所以还要再强调下。
    当我们需要更新数据来更新UI时,如果我们定义一个变量,再绑定时就会报错。因为我们的view是struct,在Swift里面意味着要加mutating 来改值。那就成了既要用struct又要更改,面对这个矛盾的需求,关键字@State,只要加了@State以后一切修改全部畅行无阻,UI层会“自动”更新相关改动。其实这个feature是非常适合“数据决定呈现”理念的。学过一段时间React,感觉非常雷同。
    很多意思还是用原文表达更到位一点

There’s a saying among SwiftUI developers that our “views are a function of their state,” but while that’s only a handful of words it might be quite meaningless to you at first.

@State allows us to work around the limitation of structs: we know we can’t change their properties because structs are fixed, but @State allows that value to be stored separately by SwiftUI in a place that can be modified.

  • 画刷Gradients
    画刷分三类

  • LinearGradient
    线性渐变,这个最简单属于一维变化,可以选择“边对边”,也可选择“角到角”

  • RadialGradient
    径向渐变

  • AngularGradient
    角度渐变

  • stop
    stop可以理解为色阶设置的固定点,画刷会自动调色的,stop可以按照百分比来设置,如一半位置就是0.5

其中有点迷糊的是径向渐变画刷,没关系写点代码就清晰了

var body: some View {
        RadialGradient(gradient: Gradient(colors: [.white,.blue]), center: .center, startRadius: 20 , endRadius: 200)
    }

image

这表示半径从20到200,颜色从白色变到蓝色。

但是如果和Stop结合是怎么回事那,有点迷糊了
如果这样

var body: some View {
        RadialGradient(gradient: Gradient(stops: [.init(color: .white, location: 0),.init(color: .blue, location: 1)]), center: .center, startRadius: 20 , endRadius: 200)
    }

那还是和前面等价的
如果把stop重合怎么样
比如

var body: some View {
        RadialGradient(gradient: Gradient(stops: [.init(color: .white, location: 0.5),.init(color: .blue, location: 0.5)]), center: .center, startRadius: 20 , endRadius: 200)
    }

这其实代表从20半径开始到20到200一半的位置也就是110左右都是白色的,后面110开始全是蓝色的0.5就是分界线。径向范围仍然是20——200
image

  • View composition
    我最喜爱的功能来了,这个就是UI神器,可以最极致抽象重组UI。
    地位和UserContorl是一样的。有了他很多想法都能玩出花来了

View composition

  • 有深度的问题思考

  • 为什么我们的View是struct而不是class?
    确实是SwiftUI的特点。而UIKit和AppKit还是以class为主。以前写C#代码struct用得很好,几乎就是一个“酱油”角色。
    这次SwiftUI里面大量使用struct确实是颠覆常识。为了降低程序的复杂度,性能,还是从一个比较高纬度的角度去看的
    Why does SwiftUI use structs for views?

  • 为啥我们用的类型是 some View,some这个关键字的意义
    其实更像是泛型限定base几乎等价

@soapgu soapgu changed the title Swift——SwiftUI(二)(未完) Swift——SwiftUI(二) Jul 1, 2022
@soapgu soapgu added the Swift label Jul 11, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant