Изменить изображение кнопки - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь изменить изображение в виде кнопки, когда пользователь загружает изображение из фото библиотеки или камеры.Но мой имидж барбуттона все время менялся и становился очень большим.Как я могу это исправить?

enter image description here

enter image description here

Я пытаюсь использовать розетку.И вот мой код

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)
    }

Если я попытаюсь сделать что-то вроде этого:

photoBarButton.image = image.withRenderingMode(.alwaysOriginal)

я получу enter image description here

1 Ответ

0 голосов
/ 11 декабря 2018

Сначала вам нужно изменить размер выбранного изображения.Добавьте ниже функцию для изменения размера изображения:

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)

enter image description here

Надеюсь, это поможет вам.

...