Вы можете получить CGRect
из UIImage
, отображаемого в режиме UIImageView
в AspectFit
. Пожалуйста, создайте расширение UIImageView
, как это,
extension UIImageView {
var contentClippingRect: CGRect {
guard let image = image else { return bounds }
guard contentMode == .scaleAspectFit else { return bounds }
guard image.size.width > 0 && image.size.height > 0 else { return bounds }
let scale: CGFloat
if image.size.width > image.size.height {
scale = bounds.width / image.size.width
} else {
scale = bounds.height / image.size.height
}
let size = CGSize(width: image.size.width * scale, height: image.size.height * scale)
let x = (bounds.width - size.width) / 2.0
let y = (bounds.height - size.height) / 2.0
return CGRect(x: x, y: y, width: size.width, height: size.height)
}
}
Теперь вы можете использовать imageView.contentClippingRect
, чтобы прочитать, как читать положение и размер изображения внутри.
Вы должны внести незначительные изменения в свой метод, вызвать вашу функцию с соответствующими границами как contentClippingRect
.
Сообщите мне, если возникнут какие-либо вопросы.
UPDATE
Пожалуйста, попробуйте это UIImageView + расширение , это может помочь вам. Это в коде Objective-C, конвертируйте его в Swift.
Вы также можете попробовать это,
let image = #imageLiteral(resourceName: "Cat03")
let x: CGRect = AVMakeRect(aspectRatio: image.size, insideRect: imageView1.frame)
print(x)
Выше код дает вам размер идеально.