我之前使用过下面的UIImage Extension:
extension UIImage
{
func scaleImage(_ maxDimension: CGFloat) -> UIImage?
{
var scaledSize = CGSize(width: maxDimension, height: maxDimension)
if size.width > size.height
{
let scaleFactor = size.height / size.width
scaledSize.height = scaledSize.width * scaleFactor
}
else
{
let scaleFactor = size.width / size.height
scaledSize.width = scaledSize.height * scaleFactor
}
UIGraphicsBeginImageContext(scaledSize)
draw(in: CGRect(origin: .zero, size: scaledSize))
let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return scaledImage
}
}我在我的ViewController中使用了这个扩展,如下所示:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
{
if let selectedImage = info[UIImagePickerControllerOriginalImage] as? UIImage
{
let scaledPhoto = selectedImage.scaleImage(640)
{
activityIndicatorOutlet.startAnimating()
dismiss(animated: true, completion:
{
//recognize the image
})
}
}
}但是Xcode给出了一个错误。因为didFinishPickingMediaWithInfo方法发生了如下变化:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
}因此,我用最新版本更改了didFinishPickingMediaWithInfo方法:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
}然后Xcode希望我改变这一点:
'UIImagePickerControllerOriginalImage' has been renamed to 'UIImagePickerController.InfoKey.originalImage'
Replace 'UIImagePickerControllerOriginalImage' with 'UIImagePickerController.InfoKey.originalImage'我已经按照Xcode的要求修改了上面的代码:
if let selectedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
{
let scaledPhoto = selectedImage.scaleImage(640)
{
activityIndicatorOutlet.startAnimating()
dismiss(animated: true, completion:
{
//recognize the image
})
}
}最后,Xcode在以下代码行中显示了一个错误:
let scaledPhoto = selectedImage.scaleImage(640)下面是错误:
Cannot invoke 'scaleImage' with an argument list of type '(Int, @escaping () -> ())'我该如何解决这个问题呢?
发布于 2020-01-28 21:35:02
从scaleImage函数获取图像时,遗漏了let关键字
像下面这样修改你的代码,让它工作起来
if let selectedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
if let scaledPhoto = selectedImage.scaleImage(100) {
print(scaledPhoto)
activityIndicatorOutlet.startAnimating()
dismiss(animated: true, completion: {
//recognize the image
})
}
}https://stackoverflow.com/questions/59949664
复制相似问题