我在 iOS 9 上使用 swift 遇到了这种非常奇怪的行为,其中我有一个
tableViewCell
,当点击拍摄某物的照片时会打开 imagePicker
,当你第一次点击单元格时,它需要大约 10秒打开选择器,但是当您点击它两次时,它会立即打开...
选择器的初始化代码如下
let certificateImagePicker = UIImagePickerController()
certificateImagePicker.delegate = self
certificateImagePicker.allowsEditing = false
certificateImagePicker.sourceType = .Camera
certificateImagePicker.modalPresentationStyle = .CurrentContext
呈现选择器的代码是
presentViewController(certificateImagePicker, animated: false, completion: nil)
我现在不知道它是否相关,但打开选择器后它显示此错误消息
对尚未渲染的视图进行快照会导致空快照。 确保您的视图在拍摄快照之前至少已渲染一次或 屏幕更新后的快照。
我在第一次尝试时也遇到了类似的延迟。对我来说有很大帮助的是在初始化父级的同时初始化它
UIImagePickerController
,就像这样:UIViewController
当我有了这个实现时,它在尝试第一个礼物时等待,然后将我的变量更改为
private var imagePickerController = UIImagePickerController()
...
@objc func addPhoto() {
imagePickerController.delegate = self
imagePickerController.sourceType = .savedPhotosAlbum
present(imagePickerController, animated: true)
}
...
,然后它就像魅力一样工作。
lazy variable
只需在 ViewDidLoad 期间显示并关闭图像选择器,这将强制控制器自行加载:
private lazy var imagePickerController = UIImagePickerController()
请注意,这可能会稍微影响总体加载时间,但这绝对比让用户等待要好。