UIImageView с aspectToFil и обрезать только верхнюю часть изображения - PullRequest
0 голосов
/ 31 мая 2018

У меня вертикальное большое длинное изображение, например, 500pt x 1000pt.

И я пытаюсь отобразить очень низ изображения.Итак, я хочу обрезать верхнюю часть изображения.

Но contentMode = aspectToFil обрезает верхнюю и нижнюю часть изображения и показывает середину изображения.

Ниже приводится поясняющее изображение.

Есть ли лучший способ?

Примечание: я не могу использовать contentMode = bottom.Потому что изображение довольно большое.

aspectToFil

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Вы можете обрезать изображение CGImage.cropping(to: CGRect).

Установите начало координат CGRect в верхнем правом углу, где вы хотите начать обрезку, и установите размер в соответствии с размером обрезки, которую выхочу.Затем выполните инициализацию и изображение с этого cgImage.

let foo = UIImage(named: "fooImage")
guard let croppedCGImage = foo?.cgImage?.cropping(to: CGRect(x: 200, y: 200, width: 375, height: 400) else { return }
guard let croppedImage = UIImage(cgImage: croppedCGImage) else { return }

Документация Apple

Playground Preview enter image description here

Редактировать: Добавление примера с использованием @IBDesignable и @IBInspectable

Видео, показывающее использование раскадровки / пера

@IBDesignable
class UIImageViewCroppable: UIImageView {

    @IBInspectable public var isCropped: Bool = false {
        didSet { updateImage() }
    }

    @IBInspectable public var croppingRect: CGRect = .zero {
        didSet { updateImage() }
    }

    func updateImage() {
        guard isCropped else { return }
        guard let croppedCGImage = image?.cgImage?.cropping(to: croppingRect) else { return }
        image = UIImage(cgImage: croppedCGImage)
    }
}
0 голосов
/ 31 мая 2018

Я нашел ответ.

Я хочу решить проблему внутри xib-файла;но я думаю, что нет способа решить это.

imageView.contentMode = .bottom
if let anImage = image.cgImage {
    imageView.image = UIImage(cgImage: anImage, scale: image.size.width / imageView.frame.size.width, orientation: .up)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...