一个可自定义的 Snapping Drawer,类似于 Apple Maps、Apple Music、Stocks、Overcast 等应用。100% 使用 SwiftUI 构建
这深受 Rideau 的启发,并基于 mshafer 的 Gist。
这是一个简短的演示,展示了我如何重建 Apple Maps UI
您可以通过 Swift Package Manager 安装 Snap,只需将以下行添加到您的 Package.swift
文件中
import PackageDescription
let package = Package(
[...]
dependencies: [
.package(url: "https://github.com/nerdsupremacist/Snap.git", from: "0.1.0")
]
)
Snap 允许您设置 1、2 或 3 个 Snapping 点,并根据您所处的位置自定义您的 UI。
例如,如果我们想要重建 Apple Maps UI,我们可以编写以下代码
import MapKit
import Snap
import SwiftUI
struct ContentView: View {
@State private var region = MKCoordinateRegion(...)
var body: some View {
ZStack {
Map(coordinateRegion: $region)
SnapDrawer(large: .paddingToTop(24), medium: .fraction(0.4), tiny: .height(100), allowInvisible: false) { state in
VStack(alignment: .leading, spacing: 10) {
SearchBar()
if state != .tiny {
Favorites()
.transition(.scale)
}
if state == .large {
Recents()
.transition(.scale)
}
}
}
}
}
}
请随意探索 API 并亲自尝试。
其他功能包括
@Binding
监听状态变化欢迎并鼓励贡献代码!
Snap 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。