[Video Summary] Ch. 4.4 Lazy Stacks and Grids in SwiftUI (Dungeon Dice app)
Mô tả nhanh
Video này hướng dẫn về cách sử dụng Lazy Stacks và Lazy Grids trong SwiftUI để tối ưu hóa hiệu suất ứng dụng, cùng với các kỹ thuật hữu ích khác như trích xuất subview, làm việc với ScrollView, sử dụng ranges trong ForEach và một số mẹo Xcode.
Video
Mô tả chi tiết
Video này hướng dẫn về cách sử dụng Lazy Stacks và Lazy Grids trong SwiftUI để tối ưu hóa hiệu suất ứng dụng, cùng với các kỹ thuật hữu ích khác như trích xuất subview, làm việc với ScrollView, sử dụng ranges trong ForEach và một số mẹo Xcode.
Dưới đây là các bước chi tiết được trình bày trong video:
1. Tạo Dự Án Mới và Thiết Lập Giao Diện:
- Tạo một dự án iOS mới trong Xcode, chọn SwiftUI.
- Đặt tên dự án là "Lazy Demos".
- Chọn iPhone 14 Pro để có kích thước màn hình tương tự.
2. Xây Dựng Giao Diện Cơ Bản với ZStack và Rectangle:
- Xóa các thành phần mặc định (Image, Text) trong VStack.
- Tạo ZStack để chứa một màu nền (Color.red) và một hình chữ nhật (Rectangle) màu cyan.
- Sử dụng modifier
frame
để set chiều rộng và chiều cao của hình chữ nhật là 100. - Tìm hiểu cách sử dụng code completion một cách hiệu quả với các modifier.
3. Trích Xuất Subview:
- Trích xuất ZStack thành một subview riêng biệt tên là
RedAndCyanView
để tái sử dụng và làm code gọn gàng. - Chuyển struct
RedAndCyanView
lên trênPreviewProvider
.
4. Sử Dụng ForEach Với Range:
- Sử dụng
ForEach
với một range để tạo một số lượng lớn các viewRedAndCyanView
(ví dụ: 1000). - Lưu ý rằng SwiftUI chỉ chấp nhận half-open range trong
ForEach
.
5. Thêm ScrollView:
- Bọc ForEach
bên trong ScrollView
để có thể cuộn qua các view (lúc này tương tự với VStack
).
- Điều chỉnh padding trên
ScrollView
để nó không bị tràn vào vùng an toàn của màn hình (safe area). - Tìm hiểu thêm về
.ignoreSafeArea()
.
6. Tìm Hiểu Về Lazy Loading:
- Thêm một print
statement để quan sát số lần các view được tạo (có sử dụng trick với let _ =
).
- Thay
VStack
bằngLazyVStack
để chỉ tạo view khi cần, giúp tiết kiệm bộ nhớ và tăng tốc ứng dụng. - Tìm hiểu vì sao có 2
print
statement cho mỗi view được hiển thị. - Thay đổi từ
LazyVStack
sangLazyHStack
và sử dụngScrollView(.horizontal)
để có thể cuộn ngang.
7. Tìm Hiểu Về LazyVGrid:
- Thay
LazyVStack
bằngLazyVGrid
để tạo lưới các view. - Tìm hiểu về các loại
GridItem
:adaptive
,fixed
,flexible
. - Sử dụng
gridItem(.adaptive(minimum: 100))
để tạo các cột tự động điều chỉnh theo kích thước màn hình. - Tìm hiểu cách thay đổi khoảng cách giữa các cột và hàng trong
LazyVGrid
(tham sốspacing
củaGridItem
và củaLazyVGrid
). - Thay đổi hướng màn hình trong simulator để xem các thay đổi về layout của lưới.
- Tìm hiểu về chế độ preview với các variant (orientation, color scheme, dynamic type).
8. Tìm Hiểu Về Các Kiểu GridItem Khác Nhau:
- Tạo một biến
columns
kiểu[GridItem]
để cấu hình các cột củaLazyVGrid
. - Sử dụng
gridItem(.fixed(100))
để tạo các cột có kích thước cố định. - Sử dụng
gridItem(.flexible())
để tạo các cột linh hoạt. - Tìm hiểu cách chỉnh các tham số
maximum
,minimum
của gridItem flexible. - Tìm hiểu về
alignment
của LazyVGrid.
9. Tìm Hiểu Về LazyHGrid:
- Thay đổi
LazyVGrid
thànhLazyHGrid
và thay đổicolumns
thànhrows
để tạo lưới theo chiều ngang. - Sử dụng
ScrollView(.horizontal)
để có thể cuộn ngang.
10. Thử Thách:
- Sử dụng các kiến thức vừa học để sửa ứng dụng Dungeon Dice sao cho các button nằm theo dạng lưới thay vì một hàng dọc.
- Sử dụng
LazyVGrid
vớigridItem(.adaptive(minimum: 102))
để dàn các nút theo dạng lưới, với số nút trên mỗi hàng sẽ thay đổi theo kích thước màn hình.
Video kết thúc bằng việc hoàn thành thử thách và chuẩn bị cho các bài học tiếp theo.
Chúc bạn một ngày học tập hiệu quả và nhiều niềm vui!