내 iOS 앱 (Swift 3)은 Action Extension을 사용하여 다른 앱의 중요한 이미지를 필요로합니다. 나는 표준 이미지 확장 템플릿 코드를 사용하고 있습니다.이 템플릿 코드는 iOS Mail 및 Photos와 같은 응용 프로그램에서 잘 작동합니다. 공유되는 이미지는 로컬 파일의 URL입니다. 그러나 공유되는 이미지가 실제 이미지 데이터 자체 인 특정 앱의 경우 내 액션 확장 코드가 이미지를 가져 오지 않습니다. 참고로Action Extension을 사용하여 이미지 가져 오기 - 로컬 이미지의 URL은 실제 이미지 데이터에서 작동하지만 실제 이미지에서는 작동하지 않습니다.
for item: Any in self.extensionContext!.inputItems {
let inputItem = item as! NSExtensionItem
for provider: Any in inputItem.attachments! {
let itemProvider = provider as! NSItemProvider
if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeImage as String) { //we'll take any image type: gif, png, jpg, etc
// This is an image. We'll load it, then place it in our image view.
weak var weakImageView = self.imageView
itemProvider.loadItem(forTypeIdentifier: kUTTypeImage as String, options: nil, completionHandler: { (imageURL,
error) in
OperationQueue.main.addOperation {
if let strongImageView = weakImageView {
if let imageURL = imageURL as? NSURL {
strongImageView.image = UIImage(data: NSData(contentsOf: imageURL as URL)! as Data)
let imageData = NSData(contentsOf: imageURL as URL)! as Data
self.gifImageView.image = UIImage.gif(data: imageData)
let width = strongImageView.image?.size.width
let height = strongImageView.image?.size.height
.... my custom logic
}
}
, 나는 일들이 작동하지 않는 응용 프로그램 중 하나에 대한 개발자에게 내밀어 그는 액션 확장에 대한 이미지를 공유하는 방법에이 코드를 공유했다.
//Here is the relevant code. At this point the scaledImage variable holds a UIImage.
var activityItems = Array<Any?>()
if let pngData = UIImagePNGRepresentation(scaledImage) {
activityItems.append(pngData)
} else {
activityItems.append(scaledImage)
}
//Then a little later it presents the share sheet:
let activityVC = UIActivityViewController(activityItems: activityItems,applicationActivities: [])
self.present(activityVC, animated: true, completion: nil)