【问题标题】:How to change image of UIImageView using ex. [touch view]如何使用 ex 更改 UIImageView 的图像。 [触摸视图]
【发布时间】:2013-12-20 16:54:48
【问题描述】:

我正在尝试制作一个简单的应用程序,以便更好地理解 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"];

    }

}

【问题讨论】:

  • 尝试使用UITapGestureRecognizer

标签: ios objective-c uiimageview uiimage


【解决方案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"];

    }
}

如果您的视图中有其他不想参与此图像更改的图像视图,那么您可能希望为您想要更改的图像视图提供标签,并检查标签中的值改为 if 语句。

【讨论】:

    【解决方案2】:

    试试这个:

    - (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"];
        }
    }
    

    【讨论】:

    • 嗨 nickAtStack,谢谢,但我收到了这个通知: Incompatible pointer type initializing 'UIImageView *' with an expression of type of 'UIView' ??
    • UIImageView *selected = (UIImageView *)[touch view];
    • 改用这一行,将选定的 UIView 类型转换为 UIImageView
    • 太棒了,非常感谢 nickAtStack 和新年快乐 :)
    【解决方案3】:

    您的代码不知道 [touch view] 是 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"];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 2011-01-26
      相关资源
      最近更新 更多