SwiftUI 实现图片分享

在 iOS16 以下,可以用下面方式实现图片分享功能。

import SwiftUI

struct ContentView: View {
    @State private var showShareSheet = false
    @State private var image: Image? = Image("YourImageName") // 从 assets 中加载图片
    
    var body: some View {
        VStack {
            image?
                .resizable()
                .aspectRatio(contentMode: .fit)
            
            Button(action: {
                self.showShareSheet = true
            }) {
                Text("Share Image")
                    .font(.title)
                    .padding()
                    .background(Color.blue)
                    .foregroundColor(.white)
                    .clipShape(RoundedRectangle(cornerRadius: 10))
            }
            .padding()
            .sheet(isPresented: $showShareSheet) {
                ShareSheet(activityItems: [imageToShare()])
            }
        }
    }
    
    func imageToShare() -> UIImage {
        // 使用此方法将 SwiftUI 的 Image 转换为 UIImage
        let renderer = UIGraphicsImageRenderer(size: CGSize(width: 100, height: 100))
        return renderer.image { ctx in
            let _ = UIImage(named: "YourImageName")!.draw(in: CGRect(x: 0, y: 0, width: 100, height: 100))
        }
    }
}

struct ShareSheet: UIViewControllerRepresentable {
    let activityItems: [Any]
    let applicationActivities: [UIActivity]? = nil

    func makeUIViewController(context: Context) -> UIActivityViewController {
        return UIActivityViewController(activityItems: activityItems, applicationActivities: applicationActivities)
    }

    func updateUIViewController(_ uiViewController: UIActivityViewController, context: Context) {}
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}


在 iOS 16 以上,用下面的方式:

  .toolbar(content: {
                // ios16 以上的分享图片
                if #available(iOS 16.0, *) {
                    let shareImage = UIImage(named: "YourImageName")!.draw(in: CGRect(x: 0, y: 0, width: 100, height: 100))
                    ShareLink(item: Image(uiImage: shareImage), preview: SharePreview("YourApplicationName"))
                } else {
                    // Fallback on earlier versions
                }
            })


已发布

分类

作者:

标签

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注