在 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 上更改图像的主要内容,如果未能解决你的问题,请参考以下文章