开发者

Detect if a touch is on a moving UIImageView from a View Controller

I have a UIViewController that is detecting touch events with touchesBegan. There are moving UIImageView objects that float around the screen, and I need to see if the touch event landed on one of them开发者_开发百科. What I am trying:

UITouch* touch = [touches anyObject];

if ([arrayOfUIImageViewsOnScreen containsObject: [touch view]]) {
    NSLog(@"UIImageView Touched!");
}

But this never happens. Also if I were to do something like this:

int h = [touch view].bounds.size.height;
NSLog([NSString stringWithFormat: @"%d", h]);

it outputs the height of the entire UIViewController (screen) everytime, even if I touch one of the UIImageViews, so clearly [touch view] is not giving me the UIImageView. How do I detect when only a UIImageView is pressed? Please do not suggest using UIButtons.

Thank you!


If you only want to detect when a UIImageView is pressed, check the class:

if (touch.view.class == [UIImageView class]) {
    //do whatever
}
else {
    //isnt a UIImageView so do whatever else
}

Edit----

You haven't set the userInteraction to enabled for the UIImageView have you?!


I know you said please do not suggest using UIButtons, but buttons sound like the best/easiest way to me.


You could try sending the hitTest message to the main view's CALayer with one of the touches - it'll return the CALayer furthest down the subview hierarchy that you touched.

You could then test to see if the layer you touched is a layer of one of the UIImageView's, and proceed from there.

This code uses a point generated from a UIGestureRecognizer.

CGPoint thePoint = [r locationInView:self.view];
thePoint = [self.view.layer convertPoint:thePoint toLayer:self.view.layer.superlayer];
selectedLayer = [self.view.layer hitTest:thePoint];


If you want to check the touch means use CGRectContainsPoint.

1.Capture the touch event and get the point where you touched,

2.Make a CGRect which bounds the object you want to check the touch event,

3.Use CGRectContainsPoint(CGRect , CGPoint) and catch the boolean return value.

http://developer.apple.com/library/ios/#DOCUMENTATION/GraphicsImaging/Reference/CGGeometry/Reference/reference.html

Here is the class reference for CGRect.


Forgot about this question- the problem was that I did not wait until viewDidLoad to set userInteractionEnabled on my UIImageView.

0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜