d6aeede2bc
从桌面工程复制而来,作为本仓库的 Xuxucheck/ 子目录。 为控制仓库体积做了两处删减: - 移除 Frameworks/opencv2.xcframework 下的两个 visionOS 切片 (xros-arm64、xros-arm64-simulator,合计约 106 MB),并同步删掉该 xcframework 内 Info.plist 里对应的两条 AvailableLibraries 记录, 只保留 ios-arm64 与 ios-arm64_x86_64-simulator。 - 移除全部 .DS_Store 与 xcuserdata/。 已用 xcodebuild 从本目录完整编译验证:BUILD SUCCEEDED, ProcessXCFramework 以 --platform ios 成功选中框架,产物含 3699 个 cv:: 符号 (OpenCV 确实链入),嵌入 framework 3 个,与移除无用 pod 之后的状态一致。 仓库约 206 MB,其中 OpenCV 203 MB、其余源码与依赖约 3 MB。
87 lines
3.0 KiB
Swift
87 lines
3.0 KiB
Swift
//
|
|
// NavigationBar.swift
|
|
// qlick
|
|
//
|
|
// Created by Brian Mwangi on 08/07/2022.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct NavigationBar: View {
|
|
var title: String = ""
|
|
@Binding var hasScrolled: Bool
|
|
@Environment(LoginStatus.self) var loginStatus
|
|
@State var isLoginModalPresented = false
|
|
|
|
var body: some View {
|
|
ZStack {
|
|
Color.clear
|
|
.background(.ultraThinMaterial)
|
|
.blur(radius: 10)
|
|
.opacity(hasScrolled ? 0 : 1)
|
|
if(loginStatus.isLogin){
|
|
Text(Storage.shared.member_name)
|
|
.animatableFont(size: hasScrolled ? 22: 34, weight: .bold)
|
|
.frame(maxWidth: .infinity, alignment: .leading)
|
|
.padding(.leading, 20)
|
|
.padding(.top, 20)
|
|
|
|
|
|
HStack {
|
|
//AsyncImage
|
|
CachedAsyncImage(url: URL(string: API.imageUrl + Storage.shared.member_avatar)) { image in
|
|
image
|
|
.resizable()
|
|
.frame(width: 26, height: 26)
|
|
.cornerRadius(10)
|
|
.padding(8)
|
|
.background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 18, style: .continuous))
|
|
.strokeStyle(cornerRadius: 18)
|
|
|
|
} placeholder: {
|
|
ZStack {
|
|
Color.secondary.opacity(0.25)
|
|
Image(systemName: "person")
|
|
.imageScale(.large)
|
|
.blendMode(.overlay)
|
|
}
|
|
}
|
|
.clipped()
|
|
|
|
}
|
|
.frame(maxWidth: .infinity, alignment: .trailing)
|
|
.padding(.trailing, 20)
|
|
.padding(.top, 20)
|
|
.offset(y: hasScrolled ? -4 : 0)
|
|
}else{
|
|
Text("Sign In")
|
|
.animatableFont(size: hasScrolled ? 22: 34, weight: .bold)
|
|
.frame(maxWidth: .infinity, alignment: .leading)
|
|
.padding(.leading, 20)
|
|
.padding(.top, 20)
|
|
.onTapGesture {
|
|
if(!loginStatus.isLogin){
|
|
isLoginModalPresented = true
|
|
}
|
|
}
|
|
.fullScreenCover(isPresented: $isLoginModalPresented){//sheet
|
|
|
|
if(!loginStatus.isLogin){
|
|
LoginView()
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
.frame(height: hasScrolled ? 44 : 70)
|
|
.frame(maxHeight: .infinity, alignment: .top)
|
|
}
|
|
}
|
|
|
|
struct NavigationBar_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
NavigationBar(title: "Featured", hasScrolled: .constant(false))
|
|
}
|
|
}
|