2013-03-19 14 views
131

私はプログラムで宣言されたイメージビューを持っており、プログラムでもイメージを設定しています。UIImageView aspect fit and center

しかし、イメージをアスペクトに合うように設定できず、中心をイメージビューに合わせることができません。言い換えれば

、私がイメージしたい:画像が大きい場合には、側面にフィットするように

  • スケールダウン。
  • 画像が小さい場合は中央ですがスケールアップしません。

どうすれば入手できますか?ただ、解決策を貼り付ける

+14

[yourImageView setContentMode:UIViewContentModeCenter]; imageView Frameが画像フレームよりも大きいかどうかを確認してください。そうでなければ[yourImageView setContentMode:UIViewContentModeAspectToFit]; –

+1

if else condition dude @RyanPoolos –

答えて

161

@manoharが

imageView.contentMode = UIViewContentModeCenter; 
if (imageView.bounds.size.width > ((UIImage*)imagesArray[i]).size.width && imageView.bounds.size.height > ((UIImage*)imagesArray[i]).size.height) { 
     imageView.contentMode = UIViewContentModeScaleAspectFit; 
} 

言ったと同じようには私の問題UIViewContentModeScaleAspectFitにImageViewののcontentModeを設定

+6

画像を見つける方法がより短くなる:CGRectContainsRect(imageView.bounds、{CGPointZero、image.size}) ' – Cfr

+0

@Cfrこれは短いかもしれないが、読みにくいかもしれない。同時に、私はif文で次のように行を分割することを提案します:CGSize imageSize =((UIImage *)imagesArray [i])size; CGSize viewSize = imageView.bounds.size'、if(viewSize .width> imageSize.width && viewSize.height> imageSize.height){'。 –

+1

UIViewContentModeScaleAspectFitにする必要があります – NoelHunter

11
[your_imageview setContentMode:UIViewContentModeCenter]; 
+12

これはスケーリングを無視します – Skrew

11

は私のために十分だっ解決しました。画像も同様に中央に表示されます。なぜ他の人がイメージに基づいてロジックを使用しているのか分かりません。また、この質問を参照してください:iOS aspect fit and center

54

迅速な言語での我々として次のようにUIImageビューの内容モードを設定することができます。私はこのようにこの問題を解決し

let newImgThumb = UIImageView(frame: CGRect(x: 10, y: 10, width: 100, height: 100)) 
newImgThumb.contentMode = .scaleAspectFit 
10

。 (UIViewContentModeScaleAspectFit付き)UIImageView

  1. setImage
  2. はIMAGESIZE (CGSize imageSize = imageView.image.size)
  3. UIImageViewリサイズを取得します。 [imageView sizeThatFits:imageSize]
  4. あなたが望む移動位置。

UIViewをUICollectionViewCellの上の中央に配置したいと考えました。 この関数を使用しました。

- (void)setImageToCenter:(UIImageView *)imageView 
{ 
    CGSize imageSize = imageView.image.size; 
    [imageView sizeThatFits:imageSize]; 
    CGPoint imageViewCenter = imageView.center; 
    imageViewCenter.x = CGRectGetMidX(self.contentView.frame); 
    [imageView setCenter:imageViewCenter]; 
} 

私のために働きます。

8

イメージビューのコンテンツモードをUIViewContentModeScaleAspectFillに設定すると、これを実現できます。

次に、次のメソッドメソッドを使用して、サイズ変更されたuiimageオブジェクトを取得します。 (スウィフト版)ここで編集

- (UIImage*)setProfileImage:(UIImage *)imageToResize onImageView:(UIImageView *)imageView 
{ 
    CGFloat width = imageToResize.size.width; 
    CGFloat height = imageToResize.size.height; 
    float scaleFactor; 
    if(width > height) 
    { 
     scaleFactor = imageView.frame.size.height/height; 
    } 
    else 
    { 
     scaleFactor = imageView.frame.size.width/width; 
    } 

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(width * scaleFactor, height * scaleFactor), NO, 0.0); 
    [imageToResize drawInRect:CGRectMake(0, 0, width * scaleFactor, height * scaleFactor)]; 
    UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return resizedImage; 
} 

func setProfileImage(imageToResize: UIImage, onImageView: UIImageView) -> UIImage 
{ 
    let width = imageToResize.size.width 
    let height = imageToResize.size.height 

    var scaleFactor: CGFloat 

    if(width > height) 
    { 
     scaleFactor = onImageView.frame.size.height/height; 
    } 
    else 
    { 
     scaleFactor = onImageView.frame.size.width/width; 
    } 

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(width * scaleFactor, height * scaleFactor), false, 0.0) 
    imageToResize.drawInRect(CGRectMake(0, 0, width * scaleFactor, height * scaleFactor)) 
    let resizedImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return resizedImage; 
} 
7
let bannerImageView = UIImageView(); 
bannerImageView.contentMode = .ScaleAspectFit; 
bannerImageView.frame = CGRectMake(cftX, cftY, ViewWidth, scrollHeight); 
6

画像がビューよりも大きくない場合、このサブクラスが中心を使用するが、それ以外の場合は縮小します。これはサイズを変更するUIImageViewで役に立ちました。

表示されるイメージは、大きなサイズのビューよりも小さく、小さいサイズのビューよりも大きくなります。私はそれをスケールダウンするだけですが、上にはしません。

class CenterScaleToFitImageView: UIImageView { 
    override var bounds: CGRect { 
     didSet { 
      adjustContentMode() 
     } 
    } 

    override var image: UIImage? { 
     didSet { 
      adjustContentMode() 
     } 
    } 

    func adjustContentMode() { 
     guard let image = image else { 
      return 
     } 
     if image.size.width > bounds.size.width || 
      image.size.height > bounds.size.height { 
      contentMode = .ScaleAspectFit 
     } else { 
      contentMode = .Center 
     } 
    } 
}