私は自分のUIImageViewを持っていて、次のようにサイズ変更する画像をそれに入れました:
UIImageView *attachmentImageNew = [[UIImageView alloc] initWithFrame:CGRectMake(5.5, 6.5, 245, 134)];
attachmentImageNew.image = actualImage;
attachmentImageNew.backgroundColor = [UIColor redColor];
attachmentImageNew.contentMode = UIViewContentModeScaleAspectFit;
これを実行して、UIImageView
のサイズ変更された画像の幅を取得してみました。
NSLog(@"Size of pic is %f", attachmentImageNew.image.size.width);
しかし、実際には元の画像の幅が返されます。画面に表示される画像のフレームを取得するにはどうすればよいですか?
編集:UIImageView
の外観は次のとおりです。赤い領域がbackgroundColor
です
より明確な解決策があるかどうかはわかりませんが、これでうまくいきます:
float widthRatio = imageView.bounds.size.width / imageView.image.size.width;
float heightRatio = imageView.bounds.size.height / imageView.image.size.height;
float scale = MIN(widthRatio, heightRatio);
float imageWidth = scale * imageView.image.size.width;
float imageHeight = scale * imageView.image.size.height;
Swiftのソリューション:
let currentHeight = imageView.bounds.size.height
let currentWidth = imageView.bounds.size.width
let newWidth = UIScreen.mainScreen().bounds.width
let newHeight = (newWidth * currentHeight) / currentWidth
println(newHeight)
あなたの場合:
float yourScaledImageWitdh = attachmentImageNew.frame.size.height * attachmentImageNew.image.size.width / attachmentImageNew.image.size.height
NSLog(@"width of resized pic is %f", yourScaledImageWitdh);
ただし、前に、元の画像の比率とimageViewの比率を確認してください。元の画像の比率がimageViewのフレームの比率よりも広い場合ではなく、赤い領域が水平に追加された場合に備えて、コード行は適切です。
AppleのドキュメントによるとIViewContentModeScaleAspectFit
content(あなたの場合actualImage)をview(あなたの場合attachmentImageNew)のサイズに合わせてスケーリングします。アスペクト比。
つまり、画像サイズ(スケーリング後)はUIImageView
と同じになります。
UPDATE:
UIViewContentModeScaleAspectFit
を使用したくない場合、およびscaledImage
のサイズを修正できる場合は、以下のコードを使用して画像を拡大縮小し、newSizeを修正できます。コードに幅を使用します。
CGSize newSize = CGSizeMake(100.0,50.0);
UIGraphicsBeginImageContext( newSize );
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Swift 2の場合、このコードスニペットを使用してaspectFitted画像をbottomscreen(この質問に対する以前の回答からのサンプル->皆さん、ありがとうございます)
let screenSize: CGRect = UIScreen.mainScreen().bounds
let screenWidth = CGFloat(screenSize.width)
let screenHeight = CGFloat(screenSize.height)
imageView.frame = CGRectMake(0, screenHeight - (imageView.image?.size.height)! , screenWidth, (imageView.image?.size.height)!)
let newSize:CGSize = getScaledSizeOfImage(imageView.image!, toSize: self.view.frame.size)
imageView.frame = CGRectMake(0, screenHeight - (newSize.height) , screenWidth, newSize.height)
func getScaledSizeOfImage(image: UIImage, toSize: CGSize) -> CGSize
{
let widthRatio = toSize.width/image.size.width
let heightRatio = toSize.height/image.size.height
let scale = min(widthRatio, heightRatio)
let imageWidth = scale*image.size.width
let imageHeight = scale*image.size.height
return CGSizeMake(imageWidth, imageHeight)
}
元の画像への参照があるため、常に元の画像と同じ寸法を提供します。
新しい画像のサイズを取得するには、アスペクト比を確認する必要があります。アスペクト比に応じて画像のサイズを変更するプレビューを使用して、さまざまなサイズのさまざまな画像を使用するための式を導き出しました。