Di seguito vi rispondere alla tua domanda, supponendo che l'UIImageView UIViewContentModeAspectFit usato:
si deve considerare il dimensionamento immagine dell'immagine all'interno UIImageView. Questo dipende da come si imposta il contentMode. Secondo la tua descrizione, presumo tu stia utilizzando UIViewContentModeAspectFit. Anche l'immagine risultante verrà centrata in UIImageView, quindi devi tenerne conto anche per il calcolo.
-(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);
}
Per una migliore spiegazione delle differenze tra le tre modalità di contenuto, vedi sotto:
Non c'è API diretto per ottenere queste informazioni. Dovrai calcolarlo da solo sulla base della cornice della vista dell'immagine, della dimensione dell'immagine e del 'contentMode' della vista dell'immagine. – rmaddy
@rmaddy che sembra una cosa molto difficile da dire. non c'è un modo per hackerarlo in un modo più semplice? –
È possibile utilizzare Imageview.image.size.width/height per ottenere l'altezza e l'altezza. Anche se non conosco le proprietà origin.x e y – Eyeball