This view controller allows you to share an image the same way as a normal
UIActivityViewController
would, with one bonus: The image is actually shown on top of the
UIActivityViewController
with a nice blurred background.
You can add any items you want to share, but only the image is displayed.
A SwiftUI adaptation is also available, based on the excellent work in ActivityView.
These screenshots are taken from my app TwoSlideOver. Check it out here
image
: The image you want to share and at the same time display as a preview.activityItems
: All the items you want to share, with theimage
included.activities
: Optional array ofUIActivity
excludedTypes
: Optional array of excluded activity types.completion
: An optionalUIActivityViewController.CompletionWithItemsHandler
to handle any code after completion.
import PSActivityImageViewController
...
let activityImageVC = ActivityImageViewController(
image: someImage,
activityItems: [someImage, self], // or just [someImage]
completion: { activity, completed, _, error in
if let error = error {
print("Error: \(error.localizedDescription)")
return
}
// Do something with the rest of the information.
}
)
// Important for iPad, as otherwise the app will crash!
activityImageVC.popoverPresentationController?.sourceView = someView
activityImageVC.popoverPresentationController?.sourceRect = someView.bounds
present(activityImageVC, animated: true)
import SwiftUI
import PSActivityImageViewController
struct ContentView: View {
let image = UIImage(named: "Image")!
@State
var activityItem: ActivityImageItem? = nil
var body: some View {
VStack(spacing: 16) {
Image(uiImage: image)
.resizable()
.aspectRatio(contentMode: .fit)
.padding()
Button(
action: {
activityItem = ActivityImageItem(image: image)
},
label: {
Text("Share image")
}
)
.activityImageSheet($activityItem)
}
.padding()
}
}
As is the case for UIActivityViewController
, on iPad you need to specify the source for
the popoverPresentationController
.
PSActivityImageViewController is available through Swift Package Manager.
Add it to an existing Xcode project as a package dependency:
- From the File menu, select Swift Packages › Add Package Dependency…
- Enter "https://github.com/psalzAppDev/PSActivityImageViewController" into the package repository URL text field
- iOS 10.0+
- Xcode 12+
PSActivityImageViewController is available under the MIT license. See the LICENSE file for more info.