我正在尝试制作一个简单的应用程序,以便更好地理解Obj-C。
我想要完成的是在触摸结束时更改我的UIImageView图片的功能。这是一个简单的任务,具有静态功能circle.image = [UIImage imageNamed:@"newImage.png"];
但我需要它是动态的,所以我不需要为每个图像键入这一行。
在某些情况下,我一直在使用[touch view]
(请参阅下面的示例代码),但这不可能用于更改图像:在对象上找不到属性“图像”输入UIImage
我希望有人能给我替代方案,我会非常感谢一些示例代码,提前谢谢:)
ViewController.h:
@interface ViewController : UIViewController{
IBOutlet UIImageView *circle;
IBOutlet UIImageView *triangle;
IBOutlet UIImageView *star;
IBOutlet UIImageView *background;
}
ViewController.m
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
if([touch view] != background){
[touch view].image = [UIImage imageNamed:@"newImage.png"];
}
}
答案 0 :(得分:1)
试试这个:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
if([touch view] != background){
UIImageView *selected = (UIImageView *)[touch view];
selected.image = [UIImage imageNamed:@"newImage.png"];
}
}
答案 1 :(得分:1)
您不应使用“==”来比较对象(仅基元)。在任何情况下,最好检查对象是否是图像视图:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
if([touch.view isKindOfClass:[UIImageView class]]){
[(UIImageView *)[touch view] image] = [UIImage imageNamed:@"newImage.png"];
}
}
如果您的视图中有其他图像视图,您不希望参与此图像更改,那么您可能希望提供您想要更改的图像视图,标记以及检查标记值。如果声明而不是。
答案 2 :(得分:0)
您的代码并不知道[触摸视图]是uiimageview子类,它认为它是uiview并且uiview没有图像属性,因此您有错误。你应该这样做:
if([touch view] != background){
if([touch view] == circle)
circle.image = [UIImage imageNamed:@"newImage.png"];
else if([touch view] == triangle)
triangle.image = [UIImage imageNamed:@"newImage.png"];
else if([touch view] == star)
star.image = [UIImage imageNamed:@"newImage.png"];
}