问题描述
我的应用程序是关于图像编辑的,一旦从主图标启动,就会出现主屏幕(由ViewController.swift控制)。在这里,您有一个直接将您带到图库的按钮,选择了图像后,预览屏幕将显示为受PreviewViewController.swift控制。
好吧,现在我正在尝试实现共享扩展,以便将图像直接从图库发送到预览屏幕,但是到目前为止,我只在主屏幕中打开了主机应用程序...
ShareViewController.swift就像:
import UIKit
import MobileCoreServices
@objc(ShareViewController)
class ShareViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.handleSharedFile()
}
private func handleSharedFile() {
let attachments = (self.extensionContext?.inputItems.first as? NSExtensionItem)?.attachments ?? []
let contentType = kUTTypeData as String
for provider in attachments {
if provider.hasItemConformingToTypeIdentifier(contentType) {
provider.loadItem(forTypeIdentifier: contentType,options: nil) { [uNowned self] (data,error) in
guard error == nil else { return }
if let url = data as? URL,let imageData = try? Data(contentsOf: url) {
let image = UIImage(data: imageData)
if let orientedImage = image?.updateImageOrientionUpSide() {
self.saveImageDocDirectory(image: orientedImage,imageName: "pickedImg.jpeg")
} else {
self.saveImageDocDirectory(image: UIImage(data: imageData)!,imageName: "pickedImg.jpeg")
}
let url = URL(string: "ImagePickerFromSharing://ImageSharePhotoKey")
var responder = self as UIResponder?
let selectorOpenURL = sel_registerName("openURL:")
while (responder != nil) {
if (responder?.responds(to: selectorOpenURL))! {
let _ = responder?.perform(selectorOpenURL,with: url)
}
responder = responder!.next
}
self.extensionContext!.completeRequest(returningItems: [],completionHandler: nil)
} else {
fatalError("Impossible to save image")
}
}}
}
}
func saveImageDocDirectory(image: UIImage,imageName: String) {
let fileManager = FileManager.default
let path = (NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask,true)[0] as Nsstring).appendingPathComponent("tempImages")
if !fileManager.fileExists(atPath: path) {
try! fileManager.createDirectory(atPath: path,withIntermediateDirectories: true,attributes: nil)
}
let url = NSURL (string: path)
let imagePath = url!.appendingPathComponent(imageName)
let urlString: String = imagePath!.absoluteString
let imageData = image.jpegData(compressionQuality: 1)
fileManager.createFile(atPath: urlString,contents: imageData,attributes: nil)
}
}
extension UIImage {
//Extensión para evitar se roten las imágenes verticales al guardarse
func updateImageOrientionUpSide() -> UIImage? {
if self.imageOrientation == .up {
return self
}
UIGraphicsBeginImageContextWithOptions(self.size,false,self.scale)
self.draw(in: CGRect(x: 0,y: 0,width: self.size.width,height: self.size.height))
if let normalizedImage:UIImage = UIGraphicsGetimageFromCurrentimageContext() {
UIGraphicsEndImageContext()
return normalizedImage
}
UIGraphicsEndImageContext()
return nil
}
}
然后在AppDelegate.swift中:
func application(
_ app: UIApplication,open url: URL,options: [UIApplication.OpenURLOptionsKey : Any] = [:]
) -> Bool {
ApplicationDelegate.shared.application(
app,open: url,sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,annotation: options[UIApplication.OpenURLOptionsKey.annotation]
)
if url.scheme == "ImagePickerFromSharing" {
if url.host == "ImageSharePhotoKey" {
self.window = UIWindow(frame: UIScreen.main.bounds)
let storyboard = UIStoryboard(name: "Main",bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "previewViewController") as! ViewController
self.window?.rootViewController = vc
self.window?.makeKeyAndVisible()
}
}
return true
}
有人知道我要去哪里吗?
提前谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)