2012-09-23 20 views
23

私は非常に新しいものですが、私はちょうど私のベアリングを得ています。私は何かを本当にシンプルなものにしたいと思っていますが、それはかなりの難題です。イメージをUIImageViewに合わせてサイズを変更する

UIImageViewに画像を表示しようとしています。私が見せている画像は大きく、UIImageViewに合わせて縮小したいと思っています。 AspectFit表示モードを設定しようとしましたが、画像は元のサイズに表示され、UIImageViewで切り捨てられます。私のコードは以下の通りです:

- (void)changeImages 
{ 
    UIImage* img11 = nil; 

    img11 = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"dog" ofType:@"jpeg"]]; 

    u11.contentMode = UIViewContentModeScaleAspectFit; 
    u11.image = img11; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    [self changeImages]; 
} 

誰かがこれでいくつかの光を当てることができますか?

ありがとうございます!

+1

あなたがhttp://stackoverflow.com/questions/185652/how-to-scale-aを読みました-uiimageview-比例して? 特に、2番目の回答が興味深いかもしれません。 –

+0

すべての権利により、これはうまくいくはずです。確認事項:すでに画像をペン先/ストーリーボードに設定していますか?もしそうなら、これは呼び出されないコードをマスクする可能性があります。 changeImagesは呼び出されていますか? 'NSLog(@" changeImages "と呼ばれる)を呼び出して、それが存在するかどうかを確認したり、ブレークポイントを使用することができます。そうでない場合は、あなたの先生/ストーリーボード内のViewControllerのクラスを、上で書いたコードのクラスに変更するのを忘れているかもしれません。 'u11'はIBOutletとして指定され、nib/storyboardまで正しくリンクされていますか? – Xono

+0

もしあなたが目指すべきことが新しいのであれば、おそらく最善の方法は、https://github.com/mattgemmell/MGImageUtilitiesのようなイメージのサイズ変更についての第3のライブラリを使うことです。 – martinezdelariva

答えて

31

こんにちは、私はこれをしようと...

- (void)changeImages 
{ 
    UIImage *img11 = [UIImage [email protected]"dog.jpeg"]; 

    u11.contentMode = UIViewContentModeScaleAspectFit; 
    u11.clipsToBounds = YES; 
    [u11 setImage:img11]; 
} 

- (void)viewWillAppear:animated 
{ 
    [super viewWillAppear:animated]; 

    [self changeImages]; 
} 

それはImageViewの内側に収まるようにこれは(上または下)の画像を拡大縮小します。 clipsToBoundsを持つことは必要ではありませんが、imageViewのフレームの外側に画像が表示されなくなります。

HTH。

4
CGSize size=CGSizeMake(79, 84);//set the width and height 
UIGraphicsBeginImageContext(size); 
[image drawInRect:CGRectMake(0,0,size.width,size.height)]; 
UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext(); 
//here is the scaled image which has been changed to the size specified 
UIGraphicsEndImageContext(); 

これは確かに動作し、QuartzCore枠組みをインポートすることを忘れないでください...

コーディングハッピーを持って(^ _ ^)....

+0

+1。これは、標準の 'UIKit' contentModeプロパティよりもサイズ変更の面で優れています。 – danielbeard

+0

本当にうまく働いています:) –

16

は、あなたのUIViewController.mに追加します。

-(UIImage *)resizeImage:(UIImage *)image imageSize:(CGSize)size 
{ 
    UIGraphicsBeginImageContext(size); 
    [image drawInRect:CGRectMake(0,0,size.width,size.height)]; 
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    // here is the scaled image which has been changed to the size specified 
    UIGraphicsEndImageContext(); 
    return newImage; 
} 

使用:

UIImage *image = [UIImage imageNamed:@"image.png"]; 
CGSize size = CGSizeMake(50, 63); // set the width and height 
UIImage *resizedImage = [self resizeImage:image imageSize:size]; 

私はそれが助けてくれることを願っています。

+0

私はUITableViewを持っていて、私のデータをオンラインから取得してUITableViewCellsの画像を取り込みました。この方法で画像をサイズ変更してパフォーマンスを向上させたいのですが、このメソッドをcellForRowAtIndexPathで呼び出しますか? –

1

ます。また、ビューを設定することができます:Interface Builderで属性インスペクタでアスペクトフィットするモード

0

私は次のことを行なったし、それが「埋めるためにスケール」既定値から「アスペクト塗りつぶし」に 変更にモードを助けました

と、次のようにコードの行を追加します(私はセル構成でそれをやった):

cell.photo.clipsToBounds = true 
関連する問題