добавление изображения к вызываемой функции из другого класса в быстром - PullRequest
0 голосов
/ 04 августа 2020

Недавно я начал работать со swift. У меня есть функция изменения размера изображения в одном быстром файле, и я хотел вызвать ее в другом быстром файле. Вот функция, которая была добавлена ​​в класс UIImage:

public extension UIImage{
class func scalePreservingAspectRatio(targetSize: CGSize) -> UIImage {
        let uimageview = UIImage()
        let widthRatio = targetSize.width / uimageview.size.width
        let heightRatio = targetSize.height / uimageview.size.height
        
        let scaleFactor = min(widthRatio, heightRatio)
        
        let scaledImageSize = CGSize(
            width: uimageview.size.width * scaleFactor,
            height: uimageview.size.height * scaleFactor
        )

        let renderer = UIGraphicsImageRenderer(
            size: scaledImageSize
        )

        let scaledImage = renderer.image { _ in
            uimageview.draw(in: CGRect(
                origin: .zero,
                size: scaledImageSize
            ))
        }
        
        return scaledImage
    }
}

, поэтому, когда я хочу вызвать эту функцию в другом файле, чтобы изменить размер «myimage», я думаю, мне следует написать вот так:

let image = UIImage(named: "myimage")
let targetSize = CGSize(width: 100, height: 100)
let scaledImage = image.UIImage.scalePreservingAspectRatio(targetSize: targetSize)

но, добавив 'image' перед UIImage.scalePreservingAspectRatio (), он не распознает функцию и выдает ошибку: Значение типа 'UIImage?' не имеет члена "UIImage". Поэтому я не знаю, как использовать свое изображение для этой функции в другом файле.

1 Ответ

0 голосов
/ 04 августа 2020

Если вы хотите вызвать его в UIImage, его нужно поместить в расширение:

extension UIImage {
    func scalePreservingAspectRatio(targetSize: CGSize) -> UIImage {
        ...
    }
}

Вы также, вероятно, хотите, чтобы он имел доступ к изображению, которое вы вызываете, поэтому удалите class из объявления функции. Затем вы можете назвать это так:

image.scalePreservingAspectRatio(targetSize: size)

Затем обновите код, чтобы использовать self вместо создания нового исходного изображения:

func scalePreservingAspectRatio(targetSize: CGSize) -> UIImage {
    let widthRatio = targetSize.width / size.width
    let heightRatio = targetSize.height / size.height

    let scaleFactor = min(widthRatio, heightRatio)

    let scaledImageSize = CGSize(
        width: size.width * scaleFactor,
        height: size.height * scaleFactor
    )

    let renderer = UIGraphicsImageRenderer(
        size: scaledImageSize
    )

    let scaledImage = renderer.image { _ in
        self.draw(in: CGRect(
            origin: .zero,
            size: scaledImageSize
        ))
    }

    return scaledImage
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...