我正在使用 Xcode 12 进行 iOS 14.0 的部署。
应用程序上的导航功能正常(当我单击其中一个子视图上的 NavigationLink 时,它导航到正确的视图,当我单击后退按钮时,它会关闭视图。)但是,当我单击后退按钮时,控制台打印以下错误:
Trying to pop to a missing destination at /Library/Caches/com.apple.xbs/Sources/Monoceros/Monoceros-103/Shared/NavigationBridge_PhoneTV.swift:337
Run Code Online (Sandbox Code Playgroud)
除了错误日志之外,该应用程序运行良好,所以我打算暂时忽略该错误......但我想知道它意味着什么?我的代码中没有任何名为“Monoceros”的内容。我猜这与 TabView 作为 NavigationView 的子视图有关?
编辑:
几个月后,这个问题仍然存在。这是可重现的代码。打开 ContentView(),在 FirstScreen() 上单击 NavigationLink,然后单击后退按钮。它会打印出 Monoceros 哈哈
Trying to pop to a missing destination at /Library/Caches/com.apple.xbs/Sources/Monoceros/Monoceros-103/Shared/NavigationBridge_PhoneTV.swift:337
Run Code Online (Sandbox Code Playgroud) 我正在尝试将自定义数据类型存储到AppStorage. 为此,模型符合RawRepresentable(遵循本教程)。它工作正常,但是当我初始化@AppStorage变量时,它需要一个初始UserModel值。我想让该变量可选,因此如果用户注销,它可以为零。这可能吗?
在类/视图中,我可以这样初始化:
@AppStorage("user_model") private(set) var user: UserModel = UserModel(id: "", name: "", email: "")
Run Code Online (Sandbox Code Playgroud)
但我想这样初始化:
@AppStorage("user_model") private(set) var user: UserModel?
Run Code Online (Sandbox Code Playgroud)
模型:
struct UserModel: Codable {
let id: String
let name: String
let email: String
enum CodingKeys: String, CodingKey {
case id
case name
case email
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
do {
id = try String(values.decode(Int.self, forKey: .id))
} catch DecodingError.typeMismatch { …Run Code Online (Sandbox Code Playgroud) 我有一个 iOS 应用程序,可以从 Firebase (Cloud Firestore) 下载视频,其提要类似于 Instagram/TikTok。但是,在用户滚动到视频之前,我无法让视频随时可用。任何提示都会非常有帮助。抖音是如何做到的?他们是否会在加载时将一大堆视频保存到后台文件中?
我当前的视频下载管理器:
在当前设置下,视频下载后可以高效播放。但是,如果视频尚未下载并且用户滚动到该视频,则上面的 (#1/2) 需要很长时间才能完成并缓冲足够的播放时间。我已经在使用操作队列并将当前视频优先于任何其他背景视频 - 但这仍然不够快。
当用户滚动时,TikTok 视频几乎总是随时可用。有什么秘密?
感谢您的帮助!
下面是 SwiftUI 列表的基本代码,它允许在所有行上使用滑动删除功能。是否可以将其限制为特定的行/索引?(即只允许第三行上的滑动删除行为,但在所有其他行上禁用它?)
在我的应用程序中,我有一个评论列表,我希望用户能够滑动删除自己的评论,但应该在所有其他评论上禁用滑动删除行为。我知道在 UIKit 中使用 UITableView 委托之一是可能的,但我不确定如何在 SwiftUI 中实现它。
struct ListTest: View {
var body: some View {
List {
ForEach(0..<50) { index in
Text("index is \(index)")
}
.onDelete(perform: { indexSet in
print(indexSet)
})
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一组存储为 AVURLAsset 的视频录制,我想将视频合并到 1 个剪辑中,以便它们连续播放,视频之间没有时间间隔。下面是我希望做的,但它只显示第一个视频。注意:我希望视频连续播放,并且每个视频之间没有空白。例如,如果当手机未录音时,录音 1 和录音 2 之间存在实时时间,则输出不应显示此情况。
感谢您的帮助!
func mergeVideos(handler: @escaping (_ asset: AVAssetExportSession)->()) {
let mixComposition = AVMutableComposition()
var videoTime = CMTime.zero
for video in self.recordings {
let tracks = video.tracks(withMediaType: .video)
let videoTrack = tracks[0]
let videoTimeRange = CMTimeRangeMake(start: .zero, duration: video.duration)
guard let compositionVideoTrack: AVMutableCompositionTrack = mixComposition.addMutableTrack(withMediaType: .video, preferredTrackID: Int32(kCMPersistentTrackID_Invalid)) else { return }
do {
try compositionVideoTrack.insertTimeRange(videoTimeRange, of: videoTrack, at: videoTime)
videoTime = CMTimeAdd(videoTime, video.duration)
} catch {
print("An error occurred")
return
}
} …Run Code Online (Sandbox Code Playgroud) xcode video-processing avassetwriter avassetexportsession swift
背景:我正在将一个项目从 UIKit 转换为 SwiftUI。目前使用 UIKit,我在 UICollectionView 中有一个 UICollectionView,两者都启用了分页。这允许用户在单元格上向上/向下和向左/向右滑动。每个单元格都会填充整个屏幕(类似于 TikTok 的主 UI),并且每个单元格都有大量要从 Firebase 中提取的数据,因此我不想在第一个视图出现时加载所有项目,而是在每个单元格出现时加载所有项目(这是 UIKit 下通过 UICollectionView 委托的当前实现)。
问题:我找不到在 SwiftUI 中启用此“分页”(基于用户滑动)的方法。很难想象苹果制作的这个新框架没有 Paging 功能?如果他们没有包含此内容,是否有解决方法?否则,是否有一种简单的方法将 UICollectionView 包含到 SwiftUIView 中?
任何帮助或解决方法都会很好!谢谢 :)
我的应用程序有一个 TabView (PageTabViewStyle),每个选项卡内都有一个 UIViewRepresentable。我已经简化了代码以生成下面的最小可重现示例。问题是 makeUIView 在出现时被多次调用,在浏览页面时又被多次调用。
仅供参考,这在 iOS 14.0 中不是问题,但在 iOS 14.2 中正在发生。我目前正在使用 Xcode 12.2 Release Candidate。
import SwiftUI
struct MakeUIViewTest: View {
var body: some View {
TabView {
CustomViewRepresentable(color: .red, index: 0)
CustomViewRepresentable(color: .blue, index: 1)
CustomViewRepresentable(color: .gray, index: 2)
}
.tabViewStyle(PageTabViewStyle())
}
}
struct MakeUIViewTest_Previews: PreviewProvider {
static var previews: some View {
MakeUIViewTest()
}
}
struct CustomViewRepresentable: UIViewRepresentable {
var color: UIColor
var index: Int
func updateUIView(_ uiView: UIViewType, context: Context) {
}
func makeUIView(context: Context) …Run Code Online (Sandbox Code Playgroud)