ProfileZoomView.swift (2639B)
1 // 2 // ProfileZoomView.swift 3 // damus 4 // 5 // Created by scoder1747 on 12/27/22. 6 // 7 import SwiftUI 8 import Kingfisher 9 10 struct ProfileImageContainerView: View { 11 12 let url: URL? 13 14 @State private var image: UIImage? 15 @State private var showShareSheet = false 16 17 private struct ImageHandler: ImageModifier { 18 @Binding var handler: UIImage? 19 20 func modify(_ image: UIImage) -> UIImage { 21 handler = image 22 return image 23 } 24 } 25 26 var body: some View { 27 28 KFAnimatedImage(url) 29 .imageContext(.pfp) 30 .configure { view in 31 view.framePreloadCount = 3 32 } 33 .imageModifier(ImageHandler(handler: $image)) 34 .clipShape(Circle()) 35 .modifier(ImageContextMenuModifier(url: url, image: image, showShareSheet: $showShareSheet)) 36 .sheet(isPresented: $showShareSheet) { 37 ShareSheet(activityItems: [url]) 38 } 39 } 40 } 41 42 struct ProfileZoomView: View { 43 44 let pubkey: String 45 let profiles: Profiles 46 47 @Environment(\.presentationMode) var presentationMode 48 49 var navBarView: some View { 50 HStack { 51 Button(action: { 52 presentationMode.wrappedValue.dismiss() 53 }, label: { 54 Image(systemName: "xmark") 55 .frame(width: 33, height: 33) 56 .background(.regularMaterial) 57 .clipShape(Circle()) 58 }) 59 60 Spacer() 61 } 62 .padding() 63 } 64 65 var body: some View { 66 ZStack { 67 Color(.systemBackground) 68 .ignoresSafeArea() 69 70 ZoomableScrollView { 71 ProfileImageContainerView(url: get_profile_url(picture: nil, pubkey: pubkey, profiles: profiles)) 72 .aspectRatio(contentMode: .fit) 73 .padding(.top, Theme.safeAreaInsets?.top) 74 .padding(.bottom, Theme.safeAreaInsets?.bottom) 75 .padding(.horizontal) 76 } 77 .ignoresSafeArea() 78 .modifier(SwipeToDismissModifier(minDistance: 50, onDismiss: { 79 presentationMode.wrappedValue.dismiss() 80 })) 81 } 82 .overlay(navBarView, alignment: .top) 83 } 84 } 85 86 struct ProfileZoomView_Previews: PreviewProvider { 87 static let pubkey = "ca48854ac6555fed8e439ebb4fa2d928410e0eef13fa41164ec45aaaa132d846" 88 89 static var previews: some View { 90 ProfileZoomView( 91 pubkey: pubkey, 92 profiles: make_preview_profiles(pubkey)) 93 } 94 }