UIImageView
とコンテンツモードアスペクトフィットサイズ220x155を使用しています。さまざまな解像度でさまざまな画像を動的に挿入していますが、すべてUIImageViewのサイズよりも大きくなっています。コンテンツモードがAspect Fitに設定されているため、UIImageViewに収まるように、比率を基準に画像が拡大縮小されます。
私の問題は、たとえば、UIImageView内の画像が220x100にスケーリングされている場合、UIImageViewを155の高さから100に縮小して、要素間のスペースを回避したいです。
これどうやってするの?
私があなたを正しく理解していれば、それは次のようなものです:画像サイズを取得する:
UIImage * img = [UIImage imageNamed:@"someImage.png"];
CGSize imgSize = img.size;
幅の倍率を計算する
float ratio=yourImageView.frame.size.width/imgSize.width;
スケーリングされた高さをチェック(アスペクト比を維持するために同じ比率を使用)
float scaledHeight=imgSize.height*ratio;
if(scaledHeight < yourImageView.frame.size.height)
{
//update height of your imageView frame with scaledHeight
}
マイケルの答えに基づいて、ここに完全な方法があります
+ (CGSize)makeSize:(CGSize)originalSize fitInSize:(CGSize)boxSize
{
float widthScale = 0;
float heightScale = 0;
widthScale = boxSize.width/originalSize.width;
heightScale = boxSize.height/originalSize.height;
float scale = MIN(widthScale, heightScale);
CGSize newSize = CGSizeMake(originalSize.width * scale, originalSize.height * scale);
return newSize;
}
Steven Stefanikの回答の編集:originalSizeが{0、0}の場合、このメソッドは機能しません。多分これらの変更を検討してください
-(CGSize)makeSize:(CGSize)originalSize fitInSize:(CGSize)boxSize
{
if (originalSize.height == 0) {
originalSize.height = boxSize.height;
}
if (originalSize.width == 0) {
originalSize.width = boxSize.width;
}
float widthScale = 0;
float heightScale = 0;
widthScale = boxSize.width/originalSize.width;
heightScale = boxSize.height/originalSize.height;
float scale = MIN(widthScale, heightScale);
CGSize newSize = CGSizeMake(originalSize.width * scale, originalSize.height * scale);
return newSize;
}
最終編集:
その質問を誤解しているようです。
実際のサイズを取得するには、次のことを試してください。
CGSize imageSize = img.size;
CGSize viewSize = imageView.frame.size;
CGSize actualSize;
if (imageSize.width > imageSize.height) {
actualSize.width = imageSize.width > viewSize.width ? viewSize.width : imageSize.width;
actualSize.height = imageSize.height * actualSize.width / imageSize.width;
}
else {
actualSize.height = imageSize.height > viewSize.height ? viewSize.height : imageSize.height;
actualSize.width = imageSize.width * actualSize.height / imageSize.height;
}