swift - Change barbutton image
问题描述
I try change my barbutton image when user load image from photoLibrary or camera. But my barbutton image all time resize and make very big. How i can fix that?
I try use outlet. And here my code
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
self.imageData = image.pngData()!
let button = UIButton(type: .custom)
button.frame = CGRect(x: 0, y: 0, width: 24, height: 24)
button.layer.cornerRadius = 0.5
button.clipsToBounds = true
button.setImage(UIImage(data: imageData!), for: .normal)
photoBarButton.customView = button
picker.dismiss(animated: true, completion: nil)
}
If i try make something like this:
photoBarButton.image = image.withRenderingMode(.alwaysOriginal)
解决方案
您需要先调整拾取图像的大小。添加以下功能以调整图像大小:
extension UIImage {
func resizedImage(newSize: CGSize) -> UIImage? {
guard size != newSize else { return self }
let hasAlpha = false
let scale: CGFloat = 0.0
UIGraphicsBeginImageContextWithOptions(newSize, !hasAlpha, scale)
UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)
draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
let newImage: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
}
在您的代码中添加上述扩展名并尝试在以下位置设置图像UIBarButtonItem
:
addAppointmentButton.image = pickedImage.resizedImage(newSize: CGSize(width: 24, height: 24))?.withRenderingMode(.alwaysOriginal)
希望这会帮助你。
推荐阅读
- postgresql - postgres 9.6 - 从多列创建对象数组 JSON
- reactjs - 我无法导入反应式搜索
- iis-express - 更改 IIS Express 的 URL?
- python - 简化嵌套的 Python 代码
- java - 未加载 OSGI 外部配置器文件夹
- django-testing - 即使 Client().login 工作,StaticLiveServerTestCase 也不会记录
- scala - 数据框中的列元素是一个数组,如何扩展它?
- docker - 如何加快 Docker 缓慢的“构建”过程?
- php - 没有 Eloquent 和 MySQL 的 Lumen JWT 身份验证
- e-commerce - 如何在 hybris 中设置不区分大小写的优惠券代码?