6

我刚刚对 iPhone 开发进行了说明,似乎找不到我正在寻找的答案。

似乎我应该能够以编程方式创建一个 UIImageView ,然后为它的触摸功能设置一个事件处理程序。

在 c# 中我会有一些看起来像的东西

按钮 b = 新按钮();b.Click+= 我的处理程序代码

现在我有这个

CGRect myImageRect = CGRectMake(0.0f, 0.0f, 141.0f, 151.0f);
UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect];

myImage.userInteractionEnabled = YES;
[myImage setImage:[UIImage imageNamed:@"myImage.png"]];
myImage.opaque = YES; // explicitly opaque for performance
[self.view addSubview:myImage];
[myImage release];

我需要做什么来覆盖触摸事件?

谢谢

4

7 回答 7

9

虽然这不是您问题的完整答案,但我认为以下解决方案可能比执行“invisible-button-workaround”更好。只需从 UIImageView 子类化并覆盖以下方法:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{

 //your UIImageView has been touched :)

 //event -> "A UIEvent object representing the event to which the touches belong."

 //touches -> "A set of UITouch instances in the event represented by event that    represent the touches in the UITouchPhaseEnded phase."

}

希望这可以帮助...

于 2010-03-16T08:24:47.167 回答
5

我有一个带有“关于”之类的图标的主视图来打开关于视图。在相应的控制器(主视图)中,我为 touchesBegan 添加了一个事件处理程序。此外,我需要检查哪个视图已被“触摸”,因为视图上有更多图标。我的 UIImageView 实例是“aboutImg”,需要检查用户交互(即 UI 构建器 -> 视图属性检查器)。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    if ([touch view] == aboutImg){
        [self ShowAbout];
    }
}

确保选中“已启用用户交互”。这是最简单的解决方案

于 2012-01-07T21:35:05.773 回答
3

只需使用带有图像的自定义 UIButton 作为背景图像。

于 2010-09-29T19:01:09.740 回答
0

我还没有找到直接使用UIImageView. 但是,如果您将其子类化并覆盖该nextResponder方法以在您的控制下返回一个委托,您就可以做您想做的事情。将委托作为子类的属性公开,然后您可以传入触摸事件的委托并随时更改它。

于 2010-03-11T18:05:32.023 回答
0

我已经看到其他答案建议在 UIImageView 下方放置一个不可见按钮,将图像视图设置为userInteractionEnabled: NO,并让触摸传递到按钮。

于 2010-03-11T19:44:07.767 回答
0

您不需要与 UIImageView 有任何关系,您可以使用自定义类型的 UIButton 并为其添加内部操作...设置 button.imageview setImage: 即:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(0,0,100,100); //edit for you own frame
UIImage *img = [UIImage imageNamed:@"myimage.png"];
[button setImage:img forState:UIControlStateNormal];

如果你想使用 UIImageView,那么你需要在你的 imageview 中添加手势。否则,您可以将 UIImageView 子类化,然后使用触摸事件。

于 2012-09-27T11:09:53.617 回答
0

向 UIImageView 或 UIView 添加 onClick 事件的最简单方法是向其添加轻击手势识别器。

UIImage *myImage = [UIImage imageNamed:@"myImage.png"];
UIImageView *myImageView = [[UIImageView alloc] initWithImage: myImage];

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action: @selector(onImageViewClicked)];
singleTap.numberOfTapsRequired = 1;
singleTap.numberOfTouchesRequired = 1;
[self.myImageView addGestureRecognizer:singleTap];
[self.myImageView setUserInteractionEnabled:YES];
于 2013-08-27T07:29:01.497 回答