I've seen this behavior as well, and I solved it the same way you did. I hope there is a better way.
-Heath Borders heath.bord...@gmail.com Twitter: heathborders http://heath-tech.blogspot.com On Mon, May 2, 2011 at 3:15 AM, Roland King <r...@rols.org> wrote: > I have a UIView subclass which has a number of UIButtons and UISliders on it, > it's a sort of control panel. I added UIPanGestureRecognizer to it with the > idea that if you stick your finger down outside one of the embedded controls, > you can move the window around. Wrote the handler for the gesture recognizer, > that worked. > > However I found that if I press one of the buttons, or try to drag one of the > sliders which are subviews of my view, the PanGestureRecognizer fires. That > completely breaks those controls as the sliders stop sliding and you cannot > drag yourself off the button to cancel the press, you just drag the view > around. > > I've re-read the UIGestureRecognizer documentation again twice and cannot > figure out why this is happening. Take the example of a touch going down on > the knob of one of the sliders, hitTest:withEvent correctly returns the > UISlider (I tested that) and so the touches should go to the slider directly > and not to its superview, my UIView subclass or its attached gesture > recognizer at all. I understand that gesture recognizers get touches before > their attached views, this from the Event Handling Guide For iOS > > " Delivery of events initially follows the usual path: from operating system > to the application object to the window object representing the window in > which the touches are occurring. But before sending an event to the > hit-tested view, the window object sends it to the gesture recognizer > attached to that view or to any of that view’s subviews." > > In this case the hit-tested view was the UISlider so I would expect touches > to be sent to any gesture recognizers on that UISlider and its subviews and > then to the UISlider itself but not to the UIView of which it's a subview > nor its attached gesture recognizer, the slider would work, the view wouldn't > try to pan. > > I did wonder if the UISlider didn't (for some strange reason) respond to > touchesBegan:withEvent: and thus the touch was bubbling back up to the > superview, my class, and being sent to the gesture recognizer there at the > same time, but apart from there being no documentation about such a flow, the > UISlider DOES respond to touchesBegan:withEvent:, so thats not it. > > I can only find documentation which talks about subviews of the hit-tested > view and their recognizers receiving touches, nothing can I find about > superviews, so this flow is puzzling. > > I'm going to use the PanGestureRecognizer delegate method > gestureRecognizer:shouldReceiveTouch: to stop this happening. Can someone > however explain which piece of documentation I've not read or have > misunderstood which explains why the PanGR on the superview of the hit-tested > view is getting touches at all? > > Thanks > > Roland > > > _______________________________________________ > > Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) > > Please do not post admin requests or moderator comments to the list. > Contact the moderators at cocoa-dev-admins(at)lists.apple.com > > Help/Unsubscribe/Update your Subscription: > http://lists.apple.com/mailman/options/cocoa-dev/heath.borders%40gmail.com > > This email sent to heath.bord...@gmail.com > _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com