Snap

一个可自定义的 Snapping Drawer,类似于 Apple Maps、Apple Music、Stocks、Overcast 等应用。100% 使用 SwiftUI 构建

这深受 Rideau 的启发,并基于 mshaferGist

这是一个简短的演示,展示了我如何重建 Apple Maps UI

安装

Swift Package Manager

您可以通过 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 并亲自尝试。

其他功能包括

贡献

欢迎并鼓励贡献代码!

许可证

Snap 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。