本系列课程来自Hacking with iOS: SwiftUI Edition,学习的同时,记录于此,希望更多人能够好好学习,天天向上!
【持续更新中。。。】
项目 1: WeSplit
通过第一个项目学习SwiftUI的基础知识
概览
解SwiftUI APP的基本结构
创建表单
添加导航栏
修改程序状态
将状态绑定到UI控件
在循环中创建视图
实现
- WeSplit 项目
挑战
- WeSplit 挑战
项目 2: Guess the Flag 猜国旗
使用 stacks, images, 和 alerts开发一个游戏
概览
颜色和视图位置
渐变色
按钮和图片
Alert弹窗
实现
- 猜国旗项目
挑战
- 猜国旗项目 挑战
项目 3: Views and Modifiers 视图和修饰符
深入研究Swift的渲染系统
概览
- 视图和修饰符项目——引言
概念
为什么SwiftUI的视图使用结构体?
SwiftUI视图的背后是什么?
为什么SwiftUI的修饰符顺序很重要?
为什么SwiftUI使用 some View 作为视图类型?
高级用法
条件修饰符
环境修饰符
将视图作为属性
视图拆分与组合
自定义修饰符
自定义容器
挑战
- 视图和修饰符项目——挑战
里程碑 1
- 里程碑:项目 1 - 3
Project 4: BetterRest
使用机器学习改善睡眠
概览
使用 Stepper 输入数字
使用 DatePicker 选择日期和时间
使用日期
用Create ML训练模型
实现
- BetterRest 项目
挑战
- BetterRest 项目——挑战
Project 5: Word Scramble
用列表构建字母排列游戏
概览
Word Scramble 项目——List 介绍
Word Scramble 项目——从App Bundle中加载资源文件
Word Scramble 项目——使用字符串
实现
- Word Scramble 项目
挑战
- Word Scramble 项目——挑战
Project 6: Animation
用动画来美化用户界面
概览
- SwiftUI:创建隐式动画
基础
SwiftUI:创建隐式动画
在SwiftUI中自定义动画
SwiftUI:动画绑定
SwiftUI:创建显式动画
高级用法
SwiftUI:控制动画堆栈
SwiftUI:动画手势
SwiftUI:视图的显示和隐藏动画
SwiftUI:使用ViewModifier生成自定义动画
里程碑 二
里程碑:项目4 - 6
Project 7: iExpense
使用此费用跟踪应用程序使我们进入多视图程序
概览
- SwiftUI:为什么@State只适用于结构体
- SwiftUI:使用@ObservedObject共享状态
- SwiftUI:Sheet弹窗
- SwiftUI:使用onDelete() 删除项目
- SwiftUI:使用UserDefaults存储用户设置
- 使用Codable归档Swift对象
实现
- iExpense 项目
挑战
- iExpense 项目挑战
Project 8: Moonshot
通过滚动视图,Codable等向用户介绍太空探索的历史
Overview
SwiftUI:使用GeometryReader调整图片大小以适应屏幕
SwiftUI:ScrollView如何让我们处理滚动数据
SwiftUI:使用NavigationLink将新视图压入堆栈
Swift:处理多级Codable数据
实现
Hacking with iOS: SwiftUI Edition - Moonshot 项目(一)
Hacking with iOS: SwiftUI Edition - Moonshot 项目(二)
挑战
- Hacking with iOS: SwiftUI Edition - Moonshot 项目挑战
Project 9: 绘图 - Drawing
使用形状、路径、颜色等为应用程序创建自定义艺术
路径 - Paths 和 形状 - Shapes
SwiftUI:创建自定义路径 Path
SwiftUI:路径 Path vs 形状 Shape
SwiftUI:自定义 Shape 使用 InsettableShape 协议实现向内绘制边框
定制和性能
SwiftUI:使用 CGAffineTransform 和奇偶填充来变换形状
SwiftUI: 使用 ImagePaint 制作边框和填充
SwiftUI:启用高性能 Metal 渲染
特殊效果和动画
SwiftUI:特殊效果 - 模糊,混合模式,饱和度调整等
SwiftUI:使用 animatableData 给形状设置动画
SwiftUI:使用 AnimatablePair 对复杂形状进行动画处理
使用SwiftUI创建万花尺
里程碑 三
里程碑:项目 7 - 9
Project 10: Cupcake Corner
构建一个可从互联网发送和接收JSON的应用
Overview
SwiftUI:为 @Published 属性添加 Codable 支持
SwiftUI:使用 URLSession 发送和接收 Codable 数据
SwiftUI:验证和禁用表单
Implementation
- 纸杯蛋糕项目(一)
- 纸杯蛋糕项目(二)
Challenges
- 纸杯蛋糕项目——挑战
Project 11: 书虫 - Bookworm
使用Core Data构建可跟踪您喜欢的书的应用
Overview
SwiftUI:使用 @Binding 创建自定义组件
SwiftUI:使用 size classes 时通过 AnyView 实现类型擦除
如何结合 Core Data 和 SwiftUI
Implementation
- 书虫项目(一)
- 书虫项目(二)
Challenges
- 书虫项目——挑战
Project 12: Core Data
深入了解SwiftUI和Core Data如何协同工作
Basics
- Core Data 项目——引言
- SwiftUI Core Data:为什么 ForEach 可以使用 .self ?
- SwiftUI Core Data:创建 NSManagedObject 子类
- SwiftUI Core Data:有条件地保存 NSManagedObjectContext
- SwiftUI Core Data:使用约束确保对象是唯一的
Advanced Techniques
- SwiftUI Core Data:使用 NSPredicate 过滤 @FetchRequest
- SwiftUI Core Data:动态过滤 @FetchRequest
- SwiftUI Core Data:动态过滤 @FetchRequest 进阶
- SwiftUI Core Data:一对多关系
Challenges
- Core Data 项目——挑战
里程碑 四
里程碑:项目 10 - 12
Project 13: 滤镜项目 Instafilter
学习在一个应用程序中链接SwiftUI,UIKit 和 Core Image
Overview
滤镜项目——引言
SwiftUI:属性包装器如何处理结构体
SwiftUI:创建自定义绑定
SwiftUI:ActionSheet 弹窗
SwiftUI:集成 Core Image
在SwiftUI视图中包装UIViewController
使用协调器管理SwiftUI视图控制器
SwiftUI:如何将图片保存到用户的照片库
Implementation
Hacking with iOS: SwiftUI Edition - 滤镜项目(一)
Customizing our filter using ActionSheet
Saving the filtered image using UIImageWriteToSavedPhotosAlbum()
Challenges
- Instafilter: Wrap up
Project 14: Bucket List
Embed maps and make network calls in this life goals app
Overview
- Bucket List: Introduction
- Adding conformance to Comparable for custom types
- Writing data to the documents directory
- Switching view states with enums
- Integrating MapKit with SwiftUI
- Communicating with a MapKit coordinator
- Using Touch ID and Face ID with SwiftUI
Implementation
- Advanced MKMapView with SwiftUI
- Customizing MKMapView annotations
- Extending existing types to support ObservableObject
- Downloading data from Wikipedia
- Sorting Wikipedia results
- Making someone else’s class conform to Codable
- Locking our UI behind Face ID
Challenges
- Bucket List: Wrap up
Project 15: Accessibility
Learn how to make your apps available to everyone
Overview
- Accessibility: Introduction
- Identifying views with useful labels
- Hiding and grouping accessibility data
- Reading the value of controls
Fixing Projects
- Fixing Guess the Flag
- Fixing Word Scramble
- Fixing Bookworm
Challenges
- Accessibility: Wrap up
Project 16: Hot Prospects
Build an app for conferences with tabs, context menus, and more.
Overview
- Hot Prospects: Introduction
- Reading custom values from the environment with @EnvironmentObject
- Creating tabs with TabView and tabItem()
- Understanding Swift’s Result type
- Manually publishing ObservableObject changes
- Controlling image interpolation in SwiftUI
- Creating context menus
- Scheduling local notifications
- Adding Swift package dependencies in Xcode
Implementation
- Building our tab bar
- Sharing data across tabs using @EnvironmentObject
- Dynamically filtering a SwiftUI List
- Generating and scaling up a QR code
- Scanning QR codes with SwiftUI
- Adding options with a context menu
- Saving and loading data with UserDefaults
- Posting notifications to the lock screen
Challenges
- Hot Prospects: Wrap up
Project 17: Flashzilla
Use gestures and haptics to build a learning app.
Overview
- Flashzilla: Introduction
- How to use gestures in SwiftUI
- Making vibrations with UINotificationFeedbackGenerator and Core Haptics
- Disabling user interactivity with allowsHitTesting()
- Triggering events repeatedly using a timer
- How to be notified when your SwiftUI app moves to the background
- Supporting specific accessibility needs with SwiftUI
Implementation
- Designing a single card view
- Building a stack of cards
- Moving views with DragGesture and offset()
- Coloring views as we swipe
- Counting down with a Timer
- Ending the app with allowsHitTesting()
- Making iPhones vibrate with UINotificationFeedbackGenerator
- Fixing the bugs
- Adding and deleting cards
Challenges
- Flashzilla: Wrap up
Project 18: Layout and Geometry
Explore the inner workings of SwiftUI's layout system.
Positioning
- Layout and geometry: Introduction
- How layout works in SwiftUI
- Alignment and alignment guides
- How to create a custom alignment guide
- Absolute positioning for SwiftUI views
GeometryReader
- Understanding frames and coordinates inside GeometryReader
- ScrollView effects using GeometryReader
Project 19: SnowSeeker
Build an app for ski resorts that works great on iPad.
Overview
- SnowSeeker: Introduction
- Working with two side by side views in SwiftUI
- Using alert() and sheet() with optionals
- Using groups as transparent layout containers
Implementation
- Building a primary list of items
- Making NavigationView work in landscape
- Creating a secondary view for NavigationView
- Changing a view’s layout in response to size classes
- Binding an alert to an optional string
- Letting the user mark favorites
Challenges
- SnowSeeker: Wrap up
项目地址:
https://github.com/twostraws/HackingWithSwift
下载单个文件方法:
1. 打开终端
2. cd 到你想保存的文件夹 比如 cd Desktop/
3. 输入
svn checkout https://github.com/twostraws/HackingWithSwift/trunk/SwiftUI/project5
4. 回车等待