开发者

Making an area of a UIImage/UIScrollView "clickable"

So I have two issues to solve:

  1. Detect a click on an area in an UIImageView.
  2. Detect a click on an area in an UIScrollView.

I'm thinking for both, since I have the x/y coordinates from the client, I'm going to programmatically instantiate an UIButton (custom/transparent) and place it over the desired area for both the UIImageView & UIScrollViews.

I will also have an event that fires when the user selects the button. I'm thinking about providing a tag and using a signature like

- (IBAction) btnP开发者_StackOverflowress:(id)sender

So I can query the sender

 [sender tag]

And then make decisions based on the tag. Each button will have a unique id. My questions are:

  1. Is this a good way to do it? What would be better?
  2. I'm aware of how to do all these things in IB, but not programmatically. I was under the impression connections (for IBActions) are only made in IB, so how can I wire up a button to an event all in code (I'll start googling now).

TIA.


If you want to use a UIButton to handle the touches, you can indeed create a custom button to place over the frame. If you take this route, to apply a method to the button, you must do the following:

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

Then when you want to call the method, it will be an IBAction method as you would expect.

- (IBAction)btnPress:(id)sender {

where [sender tag] will indeed get your specified button to proceed as you wish.

That being said, I might be more inclined to set up a UIGestureRecognizer on the views. Basically, you would tag your UIImageView and/or UIScrollView, then create a gesture recognizer:

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

Then to handle the gesture,

- (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;
}

Of course, if you have custom scrollView or imageView classes, you can simply override the touchesBegan method and do what you want from there. I think that should cover your options pretty well, so I hope this helps

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜