У 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
просто не так сложно.