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)
}
Để kiểm tra xem hàm có đúng hay không, tôi đã sử dụng chế độ xem khác xác định đường viền của hình ảnh trong UIImageView.
let frameIdentifyBorderView = UIView(frame: imageFrameInImageView)
frameIdentifyBorderView.layer.borderWidth = 3
frameIdentifyBorderView.layer.borderColor = UIColor.blueColor().CGColor
imageView.addSubview(frameIdentifyBorderView)
hoàn hảo!
Vì vậy, UIImageView không có phương pháp trực tiếp để lấy khung ảnh. Nó cần phải được tính toán bằng tay, phải không? – AechoLiu
Có. Trong thực tế, nó thậm chí không có phương pháp riêng mà trả về khung của hình ảnh dựa trên 'contentMode'. Tôi đoán các phép tính được thực hiện trong '-drawRect:' và '-sizeThatFits:'. – Costique
Tôi đã thử sizeThatFits :, nó không thể truy xuất khung hình ảnh. Tôi đã thay đổi triển khai về UIImageView. Nếu tôi phải tính toán imageFrame của bản thân, tôi sẽ thích contentMode UIViewContentModeScaleToFill. – AechoLiu