diff --git a/ios/LibNovel/LibNovel/App/RootTabView.swift b/ios/LibNovel/LibNovel/App/RootTabView.swift index 673752c..56ba759 100644 --- a/ios/LibNovel/LibNovel/App/RootTabView.swift +++ b/ios/LibNovel/LibNovel/App/RootTabView.swift @@ -27,15 +27,15 @@ struct RootTabView: View { .tag(Tab.home) LibraryView() - .tabItem { Label("Library", systemImage: "books.vertical.fill") } + .tabItem { Label("Library", systemImage: "book.pages.fill") } .tag(Tab.library) BrowseView() - .tabItem { Label("Discover", systemImage: "globe.americas.fill") } + .tabItem { Label("Discover", systemImage: "sparkles") } .tag(Tab.browse) ProfileView() - .tabItem { Label("Profile", systemImage: "person.fill") } + .tabItem { Label("Profile", systemImage: "gear") } .tag(Tab.profile) } // Reserve space for the mini-player above the tab bar so scroll content diff --git a/ios/LibNovel/LibNovel/Services/AudioPlayerService.swift b/ios/LibNovel/LibNovel/Services/AudioPlayerService.swift index 6778575..de07427 100644 --- a/ios/LibNovel/LibNovel/Services/AudioPlayerService.swift +++ b/ios/LibNovel/LibNovel/Services/AudioPlayerService.swift @@ -510,9 +510,9 @@ final class AudioPlayerService: ObservableObject { self?.togglePlayPause() return .success } - center.skipForwardCommand.preferredIntervals = [30] + center.skipForwardCommand.preferredIntervals = [15] center.skipForwardCommand.addTarget { [weak self] _ in - self?.skip(by: 30) + self?.skip(by: 15) return .success } center.skipBackwardCommand.preferredIntervals = [15] diff --git a/ios/LibNovel/LibNovel/Views/BookDetail/BookDetailView.swift b/ios/LibNovel/LibNovel/Views/BookDetail/BookDetailView.swift index bfe5c14..a92554a 100644 --- a/ios/LibNovel/LibNovel/Views/BookDetail/BookDetailView.swift +++ b/ios/LibNovel/LibNovel/Views/BookDetail/BookDetailView.swift @@ -62,7 +62,7 @@ struct BookDetailView: View { .font(.subheadline) .foregroundStyle(.white.opacity(0.8)) HStack { - TagChip(label: book.status).colorScheme(.dark) +// TagChip(label: book.status).colorScheme(.dark) ForEach(book.genres.prefix(2), id: \.self) { TagChip(label: $0).colorScheme(.dark) } diff --git a/ios/LibNovel/LibNovel/Views/Player/PlayerViews.swift b/ios/LibNovel/LibNovel/Views/Player/PlayerViews.swift index df3ed81..9f98b8c 100644 --- a/ios/LibNovel/LibNovel/Views/Player/PlayerViews.swift +++ b/ios/LibNovel/LibNovel/Views/Player/PlayerViews.swift @@ -22,7 +22,7 @@ struct MiniPlayerView: View { Button { showFullPlayer = true } label: { AsyncCoverImage(url: audioPlayer.coverURL) .frame(width: 56, height: 56) - .clipShape(RoundedRectangle(cornerRadius: 12)) + .clipShape(RoundedRectangle(cornerRadius: 40)) } .buttonStyle(.plain) @@ -141,8 +141,7 @@ struct MiniPlayerView: View { .fill(Color.black.opacity(0.3)) ) ) - .frame(height: 80) - .padding(.horizontal, 12) + .frame(height: 20) .shadow(color: .black.opacity(0.3), radius: 12, y: 4) // Follow finger in both directions while dragging vertically .offset(y: dragOffset) @@ -789,7 +788,7 @@ struct PlayerSlider: View { let fraction = (value - range.lowerBound) / (range.upperBound - range.lowerBound) let clampedFraction = max(0, min(1, fraction)) let filled = width * clampedFraction - let thumbSize: CGFloat = isDragging ? 22 : 16 + let thumbSize: CGFloat = isDragging ? 22 : 22 let trackHeight: CGFloat = isDragging ? 5 : 4 ZStack(alignment: .leading) { @@ -840,10 +839,11 @@ private struct MiniPlayerProgressBar: View { ZStack(alignment: .leading) { RoundedRectangle(cornerRadius: 40) .fill(Color.white.opacity(0.2)) - RoundedRectangle(cornerRadius: 40) + RoundedRectangle(cornerRadius: 6) .fill(Color.amber.opacity(0.3)) .frame(width: max(0, geo.size.width * fraction)) } + .clipShape(RoundedRectangle(cornerRadius: 40)) } } @@ -879,7 +879,6 @@ private struct PlayerProgressSection: View { .foregroundStyle(.white.opacity(0.5)) } .padding(.horizontal, 28) - .padding(.top, 16) } private func formatTime(_ seconds: Double) -> String {