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)
}
परीक्षण करने के लिए या नहीं, मैं UIImageView में छवि की सीमा की पहचान एक और दृश्य का उपयोग किया है।
let frameIdentifyBorderView = UIView(frame: imageFrameInImageView)
frameIdentifyBorderView.layer.borderWidth = 3
frameIdentifyBorderView.layer.borderColor = UIColor.blueColor().CGColor
imageView.addSubview(frameIdentifyBorderView)
सही!
से इस API का उपयोग तो, UIImageView छवि के फ्रेम को पुनः प्राप्त करने के लिए कोई सीधा तरीका है। इसे मैन्युअल रूप से गणना करने की आवश्यकता है, है ना? – AechoLiu
हां। वास्तव में, ऐसा लगता है कि यह एक निजी विधि भी नहीं है जो 'सामग्री मोड' के आधार पर छवि के फ्रेम को लौटाती है। मुझे लगता है कि गणना '-drawRect:' और '-sizeThatFits: 'में की जाती है। – Costique
मैंने आकार की कोशिश की है: यह छवि के फ्रेम को पुनः प्राप्त नहीं कर सकता है। मैंने UIImageView के कार्यान्वयन को बदल दिया। अगर मुझे स्वयं द्वारा छवि फ्रेम की गणना करना है, तो मैं सामग्री को पसंद करूंगा। UIViewContentModeScaleToFill। – AechoLiu