首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UIImagePicker初始化耗时太长

UIImagePicker初始化耗时太长
EN

Stack Overflow用户
提问于 2020-05-16 02:57:49
回答 1查看 99关注 0票数 1

我有一个imagePicker,当我初始化它时,它需要相当长的时间,它会使屏幕延迟,例如,我有一个屏幕,用户可以在其中写入信息并选择图片,当我单击按钮移动到该屏幕时,它在实际移动到该屏幕之前会有一点延迟。我运行了Time Profiler,屏幕上的问题似乎是imagePicker的初始化。

这是imagePicker类:

代码语言:javascript
运行
复制
import UIKit

public protocol ImagePickerDelegate: class {
    func didSelect(image: UIImage?)
}

class ImagePicker: NSObject {

    private let pickerController: UIImagePickerController
    private weak var presentationController: UIViewController?
    private weak var delegate: ImagePickerDelegate?

    init(presentationController: UIViewController, delegate: ImagePickerDelegate){
        self.pickerController = UIImagePickerController()

        super.init()

        self.presentationController = presentationController
        self.delegate = delegate

        self.pickerController.delegate = self
        self.pickerController.allowsEditing = true
        self.pickerController.mediaTypes = ["public.image"]
    }

    private func action(for type: UIImagePickerController.SourceType, title: String) -> UIAlertAction?{
        guard UIImagePickerController.isSourceTypeAvailable(type) else { return nil}
        return UIAlertAction(title: title, style: .default, handler: { [unowned self] _ in
            self.pickerController.sourceType = type
            self.presentationController?.present(self.pickerController, animated: true)
        })
    }

    func present(from sourceView: UIView){
        let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
        if let action = self.action(for: .camera, title: ImagePickerStrings.takePicture){
            alertController.addAction(action)
        }

        if let action = self.action(for: .savedPhotosAlbum, title: ImagePickerStrings.cameraRoll) {
            alertController.addAction(action)
        }

        alertController.addAction(UIAlertAction(title: GeneralStrings.cancel, style: .cancel, handler: nil))

        self.presentationController?.present(alertController, animated: true)
    }

    private func pickerController(_ controller: UIImagePickerController, didSelect image: UIImage?){
        controller.dismiss(animated: true, completion: nil)
        self.delegate?.didSelect(image: image)
    }
}

extension ImagePicker: UIImagePickerControllerDelegate{
    public func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        self.pickerController(picker, didSelect: nil)
    }

    public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        guard let image = info[.editedImage] as? UIImage else {
            return self.pickerController(picker, didSelect: nil)
        }
        self.pickerController(picker, didSelect: image)
    }
}

下面是我初始化它的方法:

我在类中有这个变量:

代码语言:javascript
运行
复制
var imagePicker: ImagePicker!

这是在viewDidLoad中:

代码语言:javascript
运行
复制
override func viewDidLoad() {
    super.viewDidLoad()
    imagePicker = ImagePicker(presentationController: self, delegate: self)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-16 06:05:20

它通常在模拟器上非常慢,在调试模式下总体上是非常慢的。

请参阅UIImagePickerController really slow when calling alloc init

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61826472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档