Następujące będzie odpowiedzieć na pytanie, zakładając swoją UIImageView używany UIViewContentModeAspectFit:
Trzeba uważać rozmiaru obrazu obrazu wewnątrz UIImageView. To zależy od tego, jak ustawić contentMode. Zgodnie z twoim opisem zakładam, że używasz UIViewContentModeAspectFit. Wynikowy obraz będzie również wyśrodkowany w UIImageView, więc musisz również wziąć to pod uwagę w obliczeniach.
-(CGRect)calculateClientRectOfImageInUIImageView:(UIImageView *)imgView
{
CGSize imgViewSize=imgView.frame.size; // Size of UIImageView
CGSize imgSize=imgView.image.size; // Size of the image, currently displayed
// Calculate the aspect, assuming imgView.contentMode==UIViewContentModeScaleAspectFit
CGFloat scaleW = imgViewSize.width/imgSize.width;
CGFloat scaleH = imgViewSize.height/imgSize.height;
CGFloat aspect=fmin(scaleW, scaleH);
CGRect imageRect={ {0,0} , { imgSize.width*=aspect, imgSize.height*=aspect } };
// Note: the above is the same as :
// CGRect imageRect=CGRectMake(0,0,imgSize.width*=aspect,imgSize.height*=aspect) I just like this notation better
// Center image
imageRect.origin.x=(imgViewSize.width-imageRect.size.width)/2;
imageRect.origin.y=(imgViewSize.height-imageRect.size.height)/2;
// Add imageView offset
imageRect.origin.x+=imgView.frame.origin.x;
imageRect.origin.y+=imgView.frame.origin.y;
return(imageRect);
}
Dla lepszego zobrazowania różnic pomiędzy trzema trybami treści, patrz poniżej:
Nie ma bezpośredniego API, aby uzyskać te informacje. Musisz to obliczyć samodzielnie na podstawie ramki widoku obrazu, rozmiaru obrazu i "contentMode" widoku obrazu. – rmaddy
@rmaddy to brzmi jak bardzo trudno powiedzieć. nie ma sposobu na zhackowanie go w prostszy sposób? –
Możesz użyć Imageview.image.size.width/height, aby uzyskać witdth i wysokość. Chociaż nie wiem o właściwościach origin.x i y – Eyeball