CameraMediaView.swift (2905B)
1 // 2 // MediaViewer.swift 3 // damus 4 // 5 // Created by Suhail Saqan on 12/22/23. 6 // 7 8 import SwiftUI 9 import Kingfisher 10 11 // MARK: - Camera Media Viewer 12 struct CameraMediaView: View { 13 let video_controller: VideoController 14 let urls: [MediaUrl] 15 16 @Environment(\.presentationMode) var presentationMode 17 18 @State private var selectedIndex = 0 19 @State var showMenu = true 20 21 let settings: UserSettingsStore 22 23 var tabViewIndicator: some View { 24 HStack(spacing: 10) { 25 ForEach(urls.indices, id: \.self) { index in 26 Capsule() 27 .fill(index == selectedIndex ? Color(UIColor.label) : Color.secondary) 28 .frame(width: 7, height: 7) 29 .onTapGesture { 30 selectedIndex = index 31 } 32 } 33 } 34 .padding() 35 .background(.regularMaterial) 36 .clipShape(Capsule()) 37 } 38 39 var body: some View { 40 ZStack { 41 Color(.systemBackground) 42 .ignoresSafeArea() 43 44 TabView(selection: $selectedIndex) { 45 ForEach(urls.indices, id: \.self) { index in 46 ZoomableScrollView { 47 ImageContainerView(video_controller: video_controller, url: urls[index], settings: settings) 48 .aspectRatio(contentMode: .fit) 49 .padding(.top, Theme.safeAreaInsets?.top) 50 .padding(.bottom, Theme.safeAreaInsets?.bottom) 51 } 52 .ignoresSafeArea() 53 .tag(index) 54 } 55 } 56 .ignoresSafeArea() 57 .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never)) 58 .gesture(TapGesture(count: 2).onEnded { 59 // Prevents menu from hiding on double tap 60 }) 61 .gesture(TapGesture(count: 1).onEnded { 62 showMenu.toggle() 63 }) 64 .overlay( 65 GeometryReader { geo in 66 VStack { 67 if showMenu { 68 NavDismissBarView() 69 Spacer() 70 71 if (urls.count > 1) { 72 tabViewIndicator 73 } 74 } 75 } 76 .animation(.easeInOut, value: showMenu) 77 .padding(.bottom, geo.safeAreaInsets.bottom == 0 ? 12 : 0) 78 } 79 ) 80 } 81 } 82 } 83 84 struct CameraMediaView_Previews: PreviewProvider { 85 static var previews: some View { 86 let url: MediaUrl = .image(URL(string: "https://jb55.com/red-me.jpg")!) 87 CameraMediaView(video_controller: test_damus_state.video, urls: [url], settings: test_damus_state.settings) 88 } 89 }