Достигните точного контроля масштаба и смещения UIImage в UIImageView - PullRequest
0 голосов
/ 10 января 2019

У меня в настоящее время есть UIImageView с изображением, загруженным внутри с contentMode, установленным в scaleAspectFill. Есть ли способ указать точный участок изображения для отображения вместо центра по умолчанию, или я подхожу к этому неправильным способом?

Код Swift:

basketballImage = UIImageView()     

basketballImage.contentMode = .scaleAspectFill
basketballImage.clipsToBounds = true
basketballImage.image = UIImage(named: "Basketball")

Исходное изображение Original Image

Желаемый результат Desired Result

Неудачный пример 1: С contentMode = .scaleAspectFill imagecontentMode = .scaleAspectFill">

Неудачный пример 2: С contentMode = .top imagecontentMode = .top">

1 Ответ

0 голосов
/ 10 января 2019

У iOS нет возможности узнать, чего вы на самом деле хотите, поскольку ваше масштабирование произвольно.

Вы можете эффективно обрезать (увеличивать), установив свойство contentScaleFactor. Соотношение сторон не имеет отношения к вашей цели.

Теперь произвольное вертикальное смещение требует аффинного преобразования, но работает только с контейнером UIView для поддержки макета. Вы должны преобразовать весь UIImageView фрейм в его родительском элементе (если только вы не хотите стать очень причудливым и переопределить метод draw или повторно реализовать UIImageView с помощью ловушки аффинного преобразования).

Я добился примерно того, чего вы хотите, установив этот образ с разрешением 2x и используя:

override func viewDidLoad() {
    super.viewDidLoad()

    let offset: CGFloat = 120.0
    let scale: CGFloat = 3.0

    /* imageView is a *child* of imageContainer and constrained to be exactly the same size and position */
    imageContainer.clipsToBounds = true

    imageView.image = UIImage(named: "basketball")
    imageView.contentMode = .center
    imageView.contentScaleFactor = scale
    imageView.transform = CGAffineTransform(translationX: 0, y: offset)
}

Это сложнее, чем хотелось бы, что с другим слоем вложенности, но UIImageView просто не так сложно.

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