【问题标题】:Making an area of a UIImage/UIScrollView "clickable"使 UIImage/UIScrollView 的区域“可点击”
【发布时间】:2011-08-28 09:03:18
【问题描述】:

所以我有两个问题要解决:

  1. 检测对 UIImageView 中某个区域的点击。
  2. 检测对 UIScrollView 中某个区域的点击。

我正在考虑两者,因为我有来自客户端的 x/y 坐标,我将以编程方式实例化 UIButton(自定义/透明)并将其放置在 UIImageView 和 UIScrollViews 所需的区域上。

我还会有一个在用户选择按钮时触发的事件。我正在考虑提供一个标签并使用像

这样的签名
- (IBAction) btnPress:(id)sender

所以我可以查询发件人

 [sender tag]

然后根据标签做出决定。每个按钮都有一个唯一的 ID。 我的问题是:

  1. 这是一个好方法吗?什么会更好?
  2. 我知道如何在 IB 中做所有这些事情,但不是以编程方式。我的印象是连接(对于 IBActions)仅在 IB 中进行,所以我如何才能将按钮连接到所有代码中的事件(我现在将开始使用谷歌搜索)。

TIA。

【问题讨论】:

  • 我不确定您将如何使用滚动视图(可能使用子类?),但对于UIImageView,您只需将userInteractionEnabled 属性设置为YES(图像视图默认为 NO)
  • 是的,照西蒙说的做。您可以使用stackoverflow.com/questions/2432176/…,但要更改图像,运行您的事件代码。
  • 好的,谢谢西蒙。 Jano,那个链接看起来很棒,我想我会沿着这条路走。谢谢,我会报告我的结果。

标签: iphone ipad uiscrollview uiimageview


【解决方案1】:

如果您想使用 UIButton 来处理触摸,您确实可以创建一个自定义按钮来放置在框架上。如果您采用这种方式,要将方法应用于按钮,您必须执行以下操作:

UIButton *myButton = [UIButton buttonWithType:....];
myButton.tag = // your tag;
[myButton addTarget:self action:@selector(btnPress:) forControlEvents:UIControlEventTouchUpInside];

那么当你想调用该方法时,它会是你所期望的IBAction方法。

- (IBAction)btnPress:(id)sender {

[sender tag] 确实会让您指定的按钮按您的意愿继续。

话虽如此,我可能更倾向于在视图上设置 UIGestureRecognizer。基本上,你会标记你的 UIImageView 和/或 UIScrollView,然后创建一个手势识别器:

UITapGestureRecognizer *myGesture = [[UITapGestureRecognizer alloc] init];
[myGesture addTarget:self action@selector(frameTouched:)];
// for the case of the imageView;
[myImageView addGestureRecognizer:myGesture];
[myGesture release];

然后来处理手势,

- (void)frameTouched:(UIGestureRecognizer *)gesture {
    int myLogicTag = [[gesture view] tag];  // this finds the tag of the view it embodies, in this case your imageView
    // continue with your code;
}

当然,如果您有自定义的 scrollView 或 imageView 类,您可以简单地重写 touchesBegan 方法并从那里做您想做的事情。我认为这应该很好地涵盖了您的选择,所以我希望这会有所帮助

【讨论】:

  • 确实如此,实际上我最终可能会走这条路。先前的答案,我不确定我是否需要所有这些。虽然这是一种非常酷的解决方法。
  • 我最终选择了这条路线并构建了一个我可以查询的小类,它将为按钮提供 x/y/l/w,我只是添加到子视图中。到目前为止工作良好。感谢大家的解答。
  • 我的荣幸。很高兴它对您的应用程序的其余部分有所帮助并祝您好运
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 2015-07-31
  • 2010-10-22
  • 2014-12-09
相关资源
最近更新 更多