在 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
}
})
发表回复