在 TouchesBegan 上更改图像

Posted

技术标签:

【中文标题】在 TouchesBegan 上更改图像【英文标题】:Changing an Image on TouchesBegan 【发布时间】:2011-04-11 13:22:15 【问题描述】:

嘿,我正在尝试在用户触摸 ImageView 时更改图像。目前 ImageView 有图像“heart1.png”,所以当我触摸屏幕上的 ImageViewer 时,它会变为“heart2.png”,这是我的代码,非常感谢您的帮助:

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint location = [touch locationInView:self.view];
    if (location.x >= imageView.frame.origin.x && location.x <= imageView.frame.origin.x + imageView.frame.size.height && location.y >= imageView.frame.origin.y && location.y <= imageView.frame.origin.y + imageView.frame.size.height) 
        imageView.image = [UIImage imageNamed:@"heart2.png"];
        

【问题讨论】:

什么有效?什么没有?你有什么问题? 与 Xcode 无关。 Xcode 只是一个 IDE 【参考方案1】:

这对我来说似乎是个问题:

if (location.x >= imageView.frame.origin.x && location.x --> 高度

应该是宽度吧 :)

【讨论】:

【参考方案2】:

与其傻傻地检查边界矩形的坐标,为什么不通过使用界面构建在图像上放置一个自定义(即不可见)UIButton 来简化事情呢?然后,您可以将touchesUpInside 连接到 IBAction 方法。这样你的代码中就没有尴尬的 if 语句了,而且犯这种错误的机会也更少了。

【讨论】:

【参考方案3】:

考虑改用 UIButton。

[button setImage:[UIImage imageNamed:@"heart1.png"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"heart2.png"] forState:UIControlStateHighlighted];

【讨论】:

【参考方案4】:

无需查找view 的位置,无需移动UIImageView。只需这样做:

-(void)viewDidLoad 

    // imageView is your UIImageView
    imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0.0, 0.0, 320.0, 480.0)];
    [imageView setImage:[UIImage imageNamed:@"heart1.png"]];
    [imageView setUserInteractionEnabled:YES];

    // Make sure userInteractionEnable is set to be YES; otherwise the touch event will be happen on UIView not on ImageView;
   [self.view addSubview:imageView];

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 

    UITouch *touch = [[event allTouches]anyObject];
    if([touch view]==imageView)
        [imageView setImage:[UIImage imageNamed:@"heart2.png"]];

【讨论】:

以上是关于在 TouchesBegan 上更改图像的主要内容,如果未能解决你的问题,请参考以下文章

将 UITouch 管理从 touchesBegan 切换到 UIScrollViewDelegate

将 UIView 移动到图像上方

Touchesbegin没有检测到被触摸的东西

将图像从滚动视图拖动到视图而不会影响其位置

悬停在图像上,更改另一个图像 - 使用多个第一张图像

如何在 UWP 中更改图像鼠标悬停上的图像