Add sharing option in image carousel view (#2629)
Add share button in Full screen image carousel view images The ellipsis (share button) allows you to share the current image being displayed in the full screen carousel viewer. Changelog-Changed: Add share button for images on full screen image carousel view Signed-off-by: Swift Coder <scoder1747@gmail.com>
This commit is contained in:
@@ -14,7 +14,7 @@ struct FullScreenCarouselView<Content: View>: View {
|
||||
@Environment(\.presentationMode) var presentationMode
|
||||
|
||||
@State var showMenu = true
|
||||
|
||||
@State private var imageDict: [URL: UIImage] = [:]
|
||||
let settings: UserSettingsStore
|
||||
@Binding var selectedIndex: Int
|
||||
let content: (() -> Content)?
|
||||
@@ -59,7 +59,7 @@ struct FullScreenCarouselView<Content: View>: View {
|
||||
ForEach(urls.indices, id: \.self) { index in
|
||||
VStack {
|
||||
if case .video = urls[safe: index] {
|
||||
ImageContainerView(video_controller: video_controller, url: urls[index], settings: settings)
|
||||
ImageContainerView(video_controller: video_controller, url: urls[index], settings: settings, imageDict: $imageDict)
|
||||
.clipped() // SwiftUI hack from https://stackoverflow.com/a/74401288 to make playback controls show up within the TabView
|
||||
.aspectRatio(contentMode: .fit)
|
||||
.padding(.top, Theme.safeAreaInsets?.top)
|
||||
@@ -71,7 +71,7 @@ struct FullScreenCarouselView<Content: View>: View {
|
||||
}
|
||||
else {
|
||||
ZoomableScrollView {
|
||||
ImageContainerView(video_controller: video_controller, url: urls[index], settings: settings)
|
||||
ImageContainerView(video_controller: video_controller, url: urls[index], settings: settings, imageDict: $imageDict)
|
||||
.aspectRatio(contentMode: .fit)
|
||||
.padding(.top, Theme.safeAreaInsets?.top)
|
||||
.padding(.bottom, Theme.safeAreaInsets?.bottom)
|
||||
@@ -96,8 +96,28 @@ struct FullScreenCarouselView<Content: View>: View {
|
||||
GeometryReader { geo in
|
||||
VStack {
|
||||
if showMenu {
|
||||
NavDismissBarView(navDismissBarContainer: .fullScreenCarousel)
|
||||
.foregroundColor(.white)
|
||||
|
||||
HStack {
|
||||
NavDismissBarView(navDismissBarContainer: .fullScreenCarousel)
|
||||
.foregroundColor(.white)
|
||||
|
||||
if let url = urls[safe: selectedIndex],
|
||||
let image = imageDict[url.url] {
|
||||
|
||||
ShareLink(item: Image(uiImage: image),
|
||||
preview: SharePreview(NSLocalizedString("Shared Picture",
|
||||
comment: "Label for the preview of the image being picture"),
|
||||
image: Image(uiImage: image))) {
|
||||
Image(systemName: "ellipsis")
|
||||
.foregroundColor(.white)
|
||||
.frame(width: 33, height: 33)
|
||||
.background(.damusBlack)
|
||||
.clipShape(Circle())
|
||||
}
|
||||
.padding(20)
|
||||
}
|
||||
}
|
||||
|
||||
Spacer()
|
||||
|
||||
if urls.count > 1 {
|
||||
|
||||
@@ -14,14 +14,18 @@ struct ImageContainerView: View {
|
||||
let url: MediaUrl
|
||||
let settings: UserSettingsStore
|
||||
|
||||
@Binding var imageDict: [URL: UIImage]
|
||||
@State private var image: UIImage?
|
||||
@State private var showShareSheet = false
|
||||
|
||||
private struct ImageHandler: ImageModifier {
|
||||
@Binding var handler: UIImage?
|
||||
@Binding var imageDict: [URL: UIImage]
|
||||
let url: URL
|
||||
|
||||
func modify(_ image: UIImage) -> UIImage {
|
||||
handler = image
|
||||
imageDict[url] = image
|
||||
return image
|
||||
}
|
||||
}
|
||||
@@ -32,7 +36,7 @@ struct ImageContainerView: View {
|
||||
.configure { view in
|
||||
view.framePreloadCount = 3
|
||||
}
|
||||
.imageModifier(ImageHandler(handler: $image))
|
||||
.imageModifier(ImageHandler(handler: $image, imageDict: $imageDict, url: url))
|
||||
.kfClickable()
|
||||
.clipped()
|
||||
.modifier(ImageContextMenuModifier(url: url, image: image, settings: settings, showShareSheet: $showShareSheet))
|
||||
@@ -58,10 +62,11 @@ fileprivate let test_video_url = URL(string: "http://cdn.jb55.com/s/zaps-build.m
|
||||
|
||||
struct ImageContainerView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
@State var imageDict: [URL: UIImage] = [:]
|
||||
Group {
|
||||
ImageContainerView(video_controller: test_damus_state.video, url: .image(test_image_url), settings: test_damus_state.settings)
|
||||
ImageContainerView(video_controller: test_damus_state.video, url: .image(test_image_url), settings: test_damus_state.settings, imageDict: $imageDict)
|
||||
.previewDisplayName("Image")
|
||||
ImageContainerView(video_controller: test_damus_state.video, url: .video(test_video_url), settings: test_damus_state.settings)
|
||||
ImageContainerView(video_controller: test_damus_state.video, url: .video(test_video_url), settings: test_damus_state.settings, imageDict: $imageDict)
|
||||
.previewDisplayName("Video")
|
||||
}
|
||||
.environmentObject(OrientationTracker())
|
||||
|
||||
Reference in New Issue
Block a user