如何通过代码更改UIImageView图像内容?

时间:2010-05-03 13:04:05

标签: iphone 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。我该如何修改我的代码? thx u。

4 个答案:

答案 0 :(得分: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]];

只是另一种选择,其他答案也会起作用。

答案 1 :(得分: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];
}

答案 2 :(得分: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;

答案 3 :(得分:2)

目前,您正在创建一个新的UIImageView并将其添加到子视图列表中。正如您所看到的那样,您最终得到了两个图像视图。你想要的只是改变第一个视图显示的图像。保留您创建的UIImageView的句柄(可能作为成员字段),当您想要更改图像时,只需编写

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