2010-05-03 79 views
4

我用這個來分配圖像:如何通過代碼更改UIImageView圖像內容?

UIImage *img = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"myImage" ofType:@"png"]]; 
CGRect cropRect = CGRectMake(175, 0, 175, 175); 
CGImageRef imageRef = CGImageCreateWithImageInRect([img CGImage], cropRect); 
imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 175, 175)]; 
imageView.image = [UIImage imageWithCGImage:imageRef]; 
[self addSubview:imageView]; 
CGImageRelease(imageRef); 

現在,我想改變MYIMAGE到myImage2的形象,所以我這樣做:

UIImage *img = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"myImage2" ofType:@"png"]]; 
CGRect cropRect = CGRectMake(175, 0, 175, 175); 
CGImageRef imageRef = CGImageCreateWithImageInRect([img CGImage], cropRect); 
imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 175, 175)]; 
imageView.image = [UIImage imageWithCGImage:imageRef]; 
[self addSubview:imageView]; 

它的工作原理,但沒有辦法,我想,我想改變圖像,而不是在前面的圖像上添加imageView。我如何修改我的代碼?謝謝你。

回答

6

或者,這可以用標籤完成。

//Set up the imageView in viewDidLoad or similar 
UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 175, 175)]; 
[imageView setTag:123]; 
[self.view addSubview:imageView]; 
[imageView release]; 

然後你想改變圖像的任何時候,你只需要使用:

[(UIImageView*)[self.view viewWithTag:123] setImage:[UIImage imageWithCGImage:imageRef]]; 

又一個選項,其他的答案將工作一樣好。

2

目前,您正在創建一個新的UIImageView並將其添加到子視圖列表中。正如你所看到的,你最終會得到兩個圖像視圖。你想要的只是改變第一個視圖顯示的圖像。保留的句柄的UIImageView創建(可能爲成員場),當你想改變形象,只寫

UIImage *img = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"myImage2" ofType:@"png"]]; 
imageView.image = [UIImage imageWithCGImage:imageRef]; 
+0

@Adam_Wright什麼是imageRef簡單起見?你有沒有留下一條線,或者我應該知道這是什麼?謝謝。 – StoneBreaker 2012-02-29 23:20:59

+0

@StoneBreaker它在提問者代碼中提到。 – 2012-03-01 12:56:39

3

我不知道你爲什麼要費心去裁剪圖像;只需適當地設置contentMode屬性即可。替代方法:

UIImage *image = [UIImage imageNamed:@"myImage.png"]; 
UIImage *image2 = [UIImage imageNamed:@"myImage2.png"]; 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:...]; 
imageView.contentMode = UIViewContentModeTopLeft; 
imageView.image = image; 
[self.view addSubView:imageView]; 
... 
imageView.image = image2; 
+0

我可以從[self.view]中取回imageView嗎? – Tattat 2010-05-03 13:17:39

+0

您可以隨時使用標籤併爲viewWithTag詢問self.view: – 2010-05-03 13:24:07

4

我只是花了一天時間來看這個棘手的問題,所以我想我會分享如何更改UIImageView上的圖像。對此有太多的職位沒能表現出這樣所以這裏去一個簡單的方法...

如果你想改變的圖像顯示在一個ImageView的

在您的.h

IBOutlet UIImageView *imageView; 
@property (nonatomic, retain, readwrite) IBOutlet UIImageView *imgView; 

並在您的m

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(133, 230, 60, 60)]; 
    self.imageView.image = [UIImage imageNamed:@"firstPicure.png"]; 
    [self.view addSubview:self.imageView]; 
} 

現在改變顯示在您的ImageView圖像。關於這種方法的一個好處是,imageNamed會返回一個圖像的自動釋放實例,這樣就可以避免內存泄漏 ,以及所使用performSelectorOnMainThread來辦理變更

-(void)changeImage 
{ 
    [self.imageView performSelectorOnMainThread:@selector(setImage:) withObject: [UIImage imageNamed:@"secondPicture.png"] waitUntilDone:YES]; 
}