I am looking to implement a pinch in/out on top of a UITableView, I have looked at several methods including this one:
But while I can create a UIViewTouch
object and overlay it onto my UITableView, scroll events are not being relayed to my UITableView, I can still select cells, and they respond properly by triggering a transition to a new ViewController object. But I can not scroll the UITableView despite passing the touchesBegan, touchesMoved, and touchesEnded events.
Nimrod wrote:
I didn't immediately understand this statement. For the benefit of anyone else who had the same problem as me, the way I did it was by adding the following code to my UIView subclass which must detect touches.
This version of
interceptEvent:
is a simple implementation of pinch-to-zoom detection. NB. Some code was taken from Beginning iPhone 3 Development by Apress.Edit: While this code worked 100% fine in the iPhone simulator, when I ran it on an iPhone device I encountered strange bugs related to the table scrolling. If this also happens to you, then force the
interceptEvent:
method to return NO in all cases. This means that the superclass will also process the touch event, but fortunately this did not break my code.This seems to be a classic problem. In my case I wanted to intercept some events over a UIWebView which can't be subclassed, etc etc.
I've found that the best way to do it is to intercept the events using the UIWindow:
EventInterceptWindow.h
EventInterceptWindow.m:
Create that class, change the class of your UIWindow in your MainWindow.xib to EventInterceptWindow, then somewhere set the eventInterceptDelegate to a view controller that you want to intercept events. Example that intercepts a double-tap:
Related info here: http://iphoneincubator.com/blog/windows-views/360idev-iphone-developers-conference-presentation