我用它来分配图像:
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。
答案 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];