使UIImage / UIScrollView的区域“可点击”

时间:2011-05-18 20:20:09

标签: iphone ipad uiscrollview uiimageview

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

  1. 检测UIImageView中某个区域的点击。
  2. 检测UIScrollView中区域的单击。
  3. 我正在考虑两者,因为我有来自客户端的x / y坐标,我将以编程方式实例化UIButton(自定义/透明)并将其放置在UIImageView&的所需区域上。 UIScrollViews。

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

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

    所以我可以查询发件人

     [sender tag]
    

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

    1. 这是一个很好的方法吗?什么会更好?
    2. 我知道如何在IB中执行所有这些操作,但不是以编程方式执行。我的印象是连接(对于IBActions)只在IB中制作,所以如何在代码中将按钮连接到一个事件(我现在就开始谷歌搜索)。
    3. TIA。

1 个答案:

答案 0 :(得分:4)

如果您想使用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方法并从那里做你想做的事。我认为这应该很好地涵盖你的选择,所以我希望这有帮助