if you want to calculate it yourself, use below code written by me.
func getImageFrameInImageView(imageView : UIImageView) -> CGRect {
/*
by 徐明刚, [email protected]
算法:
设高宽比 r = h/w, 则:r(imageView) 缩写成r(v), r(image)缩写为r(i),
if r(i) > r(v), 则
h(i) = h(v),
h(i)/w(i) = r(i) -> w(i) = h(i)/r(i)
y = 0
x = (w(v)/2) - (w(i)/2)
反之
*/
let image = imageView.image!
let wi = image.size.width
let hi = image.size.height
print("wi:\(wi), hi:\(hi)")
let wv = imageView.frame.width
let hv = imageView.frame.height
print("wv:\(wv), hv:\(hv)")
let ri = hi/wi
let rv = hv/wv
print("ri:\(ri), rv:\(rv)")
var x, y, w, h: CGFloat
if ri > rv {
h = hv
w = h/ri
x = (wv/2) - (w/2)
y = 0
} else {
w = wv
h = w * ri
x = 0
y = (hv/2) - (h/2)
}
return CGRect(x: x, y: y, width: w, height: h)
}
Para probar si la función es correcto o no, he utilizado otra vista identificación de la frontera de la imagen en UIImageView.
let frameIdentifyBorderView = UIView(frame: imageFrameInImageView)
frameIdentifyBorderView.layer.borderWidth = 3
frameIdentifyBorderView.layer.borderColor = UIColor.blueColor().CGColor
imageView.addSubview(frameIdentifyBorderView)

perfecto!
Así, UIImageView tiene ningún método directo para recuperar el marco de imagen. Necesita ser calculado manualmente, ¿verdad? – AechoLiu
Sí. De hecho, ni siquiera parece tener un método privado que devuelva el marco de la imagen basado en 'contentMode'. Supongo que los cálculos se realizan en '-drawRect:' y '-sizeThatFits:'. – Costique
Probé sizeThatFits :, no puede recuperar el marco de la imagen. Cambié la implementación sobre UIImageView. Si tengo que calcular el cuadro de imagen por mí mismo, preferiré el modo de contenido UIViewContentModeScaleToFill. – AechoLiu