フレームサイズをx = 0, y = 0, width = 404, height = 712
に設定したUIImageView
があります。私のプロジェクトでは、UIImageView
の画像を動的に変更する必要があります。
私はこのコードを使用して画像を変更しています:
self.imageView.image = [UIImage imageNamed:@"setting-image.png"];
問題は、*.png
画像サイズがUIImageView
フレームサイズよりも小さい場合、画像が伸縮することです。伸びたくありません。それを行う方法はありますか?
使用できます
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
スウィフト3:
imageView.contentMode = .scaleAspectFit
またはUIViewContentModeCenter
/.center
、または IViewドキュメント で説明されているその他のモード。
ClipsToBoundsをUIViewContentModeScaleAspectFit contentModeと組み合わせて設定することが、私にとってのトリックでした。それが誰かを助けることを願っています!
imageView.clipsToBounds = YES;
imageView.contentMode = UIViewContentModeScaleAspectFit;
contentMode
プロパティを使用します。おそらくUIViewContentModeScaleAspectFit
またはUIViewContentModeCenter
が必要でしょう。
インターフェイスビルダー内で、UIImageのモードを「拡大縮小」から「中央」に変更します。画像が必要な正確なサイズであることを確認してください。
画像が伸びず、画像ビューの中央に配置されるように、画像の幅と高さとしてCGSizeを設定する必要があります。
- (UIImage *)imageWithImage:(UIImage *)image scaledToFillSize:(CGSize)size
{
CGFloat scale = MAX(size.width/image.size.width, size.height/image.size.height);
CGFloat width = image.size.width * scale;
CGFloat height = image.size.height * scale;
CGRect imageRect = CGRectMake((size.width - width)/2.0f,
(size.height - height)/2.0f,
width,
height);
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
[image drawInRect:imageRect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
Swift 3:の更新
imageView.contentMode = .scaleAspectFit
ContentModeを変更します。例:
imageView.contentMode = UIViewContentModeScaleAspectFit;
画像の元のサイズの使用方法-ストレッチなし
scale to fill
からAspect Fit
に変更するだけです。UIImageView
にこれを使用します
imageView.contentMode = UIViewContentModeScaleAspectFill;
スペースを取得せず、スケールを保持します。ただし、画像の一部は切り取られます。
次を使用する場合:
imageView.contentMode = UIViewContentModeScaleAspectFit;
いくらかの空きスペースがありますが、スケールは保持されます。
画像がimageivewよりも大きい場合でもストレッチ
Swift
let qCodeImage = UIImage(named: "qcode-placeholder.png")!
let qCodeImageView = UIImageView(frame: CGRectMake(0, 0, CGRectGetWidth(cardView.frame)-30, CGRectGetWidth(cardView.frame)-30))
qCodeImageView.image = qCodeImage
qCodeImageView.clipsToBounds = true
qCodeImageView.contentMode = UIViewContentMode.ScaleToFill
qCodeImageView.center = cardView.center