簡體   English   中英

如何通過代碼更改UIImageView圖像內容?

[英]How to change the UIImageView image content by code?

我用它來分配圖像:

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。 我該如何修改我的代碼? 謝謝你。

或者,這可以使用標簽來完成。

//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]];

只是另一種選擇,其他答案也會起作用。

我只花了一天時間看這個棘手的問題,所以我想我會分享如何在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];
}

我不確定你為什么要打擾裁剪圖像; 只需適當設置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;

目前,您正在創建一個新的UIImageView並將其添加到子視圖列表中。 正如您所看到的那樣,您最終得到了兩個圖像視圖。 你想要的只是改變第一個視圖顯示的圖像。 保留您創建的UIImageView的句柄(可能作為成員字段),當您想要更改圖像時,只需寫入

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM