2012-09-23 200 views
23

我對於目標c非常陌生,而且我只是接受了我的軸承。我想做一些非常簡單的事情,但它證明是一個相當大的挑戰:調整圖像大小以適合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-proportionally? 特別是第二個答案可能是有趣的。 –

+0

所有權利,這應該工作。需要檢查的內容:您是否已經將圖像設置在筆尖/故事板中?如果是這樣,這可能掩蓋代碼不被調用。 changeImages被叫?你可以調用'NSLog(@「changeImages called」)'來查看它是否或者使用斷點。如果不是,您可能忘記將nib/storyboard中ViewController的類更改爲您上面編寫的代碼的類。是否將'u11'指定爲IBOutlet並正確鏈接到筆尖/故事板? – Xono

+0

如果你對目標c很陌生,最好的辦法就是使用第三個關於圖像大小調整的函數庫,比如https://github.com/mattgemmell/MGImageUtilities – 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

用於Quartz方法。它比標準的'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