title: UISwipeGestureRecognizer called twice
body: <p>I'm having problems with a view I'm implementing.</p>
  
  <p>It's a view that shows a pdf page in a CATiledLayer. That tiled view is inside an UISCrollView.</p>
  
  <p>I had the view controlling itself as the "ZoomingPDFView" apple example. I made a few modifications so it would recognize swiping gestures when scrolling is not enabled and advice in various threads and questions on this site. At that time the gestures were called <strong>once</strong>. But as I needed to decouple the view and delegate the swiping to cache the pages and do a versatile view, I created a view controller to handle the swiping gestures and the page loading methods increase the performance of the pdf view.</p>
  
  <p>Now that I have the view on one side and the controller on the other side, swiping gestures are detected twice and I can't get even a clue of the issue.</p>
  
  <p>this is the console output</p>
  
  <pre><code>2010-11-19 11:45:08.370 ZoomingPDFViewerForIPad[20327:207] initWithFrame and page
  2010-11-19 11:45:08.530 ZoomingPDFViewerForIPad[20327:207] drawPage
  2010-11-19 11:45:08.531 ZoomingPDFViewerForIPad[20327:207] scale: 1.000000
  2010-11-19 11:45:08.531 ZoomingPDFViewerForIPad[20327:207] pdf scale: 1.290062
  2010-11-19 11:45:08.532 ZoomingPDFViewerForIPad[20327:207] pdf initial scale: 1.290062
  2010-11-19 11:45:15.488 ZoomingPDFViewerForIPad[20327:207] left
  2010-11-19 11:45:15.489 ZoomingPDFViewerForIPad[20327:207] left
  2010-11-19 11:45:15.490 ZoomingPDFViewerForIPad[20327:207] initWithFrame and page
  2010-11-19 11:45:15.538 ZoomingPDFViewerForIPad[20327:207] drawPage
  2010-11-19 11:45:15.538 ZoomingPDFViewerForIPad[20327:207] scale: 1.000000
  2010-11-19 11:45:15.539 ZoomingPDFViewerForIPad[20327:207] pdf scale: 1.290062
  2010-11-19 11:45:15.539 ZoomingPDFViewerForIPad[20327:207] pdf initial scale: 1.290062
  2010-11-19 11:45:15.540 ZoomingPDFViewerForIPad[20327:1a07] initWithFrame and page
  2010-11-19 11:45:15.541 ZoomingPDFViewerForIPad[20327:5f07] initWithFrame and page
  2010-11-19 11:45:15.593 ZoomingPDFViewerForIPad[20327:1a07] drawPage
  2010-11-19 11:45:15.594 ZoomingPDFViewerForIPad[20327:1a07] scale: 1.000000
  2010-11-19 11:45:15.594 ZoomingPDFViewerForIPad[20327:1a07] pdf scale: 1.290062
  2010-11-19 11:45:15.595 ZoomingPDFViewerForIPad[20327:1a07] pdf initial scale: 1.290062
  2010-11-19 11:45:15.695 ZoomingPDFViewerForIPad[20327:5f07] drawPage
  2010-11-19 11:45:15.704 ZoomingPDFViewerForIPad[20327:5f07] scale: 1.000000
  2010-11-19 11:45:15.707 ZoomingPDFViewerForIPad[20327:5f07] pdf scale: 1.290062
  2010-11-19 11:45:15.713 ZoomingPDFViewerForIPad[20327:5f07] pdf initial scale: 1.290062
  </code></pre>
  
  <p>here's the code:</p>
  
  <pre><code>#import &lt;UIKit/UIKit.h&gt;
  
  @class TiledPDFView;
  @protocol PDFScrollViewDelegate;
  
  @interface PDFScrollView : UIScrollView &lt;UIScrollViewDelegate&gt; {
   // The TiledPDFView that is currently front most
   TiledPDFView *pdfView;
   // The old TiledPDFView that we draw on top of when the zooming stops
   TiledPDFView *oldPDFView;
  
  
   // A low res image of the PDF page that is displayed until the TiledPDFView
   // renders its content.
   UIImageView *backgroundImageView;
  
  
   id&lt;PDFScrollViewDelegate,NSObject&gt; pdfViewDelegate;
  
   // current pdf zoom scale
   CGFloat pdfScale;
  
   CGPDFPageRef page;
   CGPDFDocumentRef pdf;
   CGFloat initialScale;
   TiledPDFView *initialTiledView;
   int currentPage;
   int pageCount;
  
   UITapGestureRecognizer *doubleTap,*twoFingerDoubleTap;
   UISwipeGestureRecognizer *rightSwipe, *leftSwipe;
  
  
  
  }
  
  @property (nonatomic,retain) id&lt;PDFScrollViewDelegate&gt; pdfViewDelegate;
  -(id)initWithFrame:(CGRect)rect;
  -(id)initWithFrame:(CGRect)frame andPDFPage:(CGPDFPageRef)aPage;
  -(void)enableGestures;
  -(void)drawPage;
  @end
  
  @implementation PDFScrollView
  @synthesize pdfViewDelegate;
  
  ….
  
  -(void)enableGestures{
   leftSwipe = [[UISwipeGestureRecognizer alloc ]initWithTarget:self action:@selector(handleRightSwipe:)];
  
   leftSwipe.direction = UISwipeGestureRecognizerDirectionRight;
  
   [self addGestureRecognizer:leftSwipe];
  
   //add right swipe
   rightSwipe = [[UISwipeGestureRecognizer alloc ]initWithTarget:self action:@selector(handleLeftSwipe:)];
   rightSwipe.direction = UISwipeGestureRecognizerDirectionLeft;
   [self addGestureRecognizer:rightSwipe];
  
  
  
   doubleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleDoubleTap:)];
   doubleTap.numberOfTapsRequired =2;
   doubleTap.numberOfTouchesRequired =1;
   [self addGestureRecognizer:doubleTap];
  
  
   twoFingerDoubleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleTwoFingerDoubleTap:)];
   twoFingerDoubleTap.numberOfTapsRequired =2;
   twoFingerDoubleTap.numberOfTouchesRequired =2;
   [self addGestureRecognizer:twoFingerDoubleTap];
  
  
  }
  
  // some more code
  @end
  
  #import &lt;UIKit/UIKit.h&gt;
  #import "PDFScrollViewDelegate.h"
  @class TiledPDFView;
  
  
  @interface ZoomingPDFViewerForIPadViewController : UIViewController &lt;UIScrollViewDelegate,PDFScrollViewDelegate&gt;  {
  
   CGPDFPageRef page;
  
  
  
   CGPDFDocumentRef pdf;
  
   NSInteger currentPage;
  
  
  
   NSInteger pageCount;
  
   PDFScrollView *myScrollView;
  
   PDFScrollView *previousPage;
   PDFScrollView *nextPage;
  
  }
  
  -(id)initWithResourcePath:(NSString*)path ;
  -(void)loadNextPage;
  -(void)loadPreviousPage;
  @end
  
  
  @implementation ZoomingPDFViewerForIPadViewController
  
  // some more code
  #pragma mark -
  #pragma mark PDFScrollViewDelegate methods
  /* 
   called when user swipes right on the view
   */
  
  -(void)viewDetectedRightSwipe:(PDFScrollView*)pdfScrollView withGesture:(UISwipeGestureRecognizer*)recognizer {
    NSLog(@"right");
   if (currentPage&gt;1){
    //decreate page counter
    currentPage--;
  
  
    // release old next page
  
    if(nextPage){
     [nextPage release];
    }
    // set the actual page as the next one
    nextPage = [myScrollView retain];
  
    // remove the view from the actual view
    [myScrollView removeFromSuperview];
  
    // check if the previous page is loaded
    if(!previousPage)
     [self loadPreviousPage];
  
    // set the previouse page as the actual page
    myScrollView = previousPage;
  
    myScrollView.pdfViewDelegate = self;
    //[myScrollView drawPage];
    // load a new previous page
    //[NSThread detachNewThreadSelector:@selector(loadNextPage) toTarget:self withObject:nil];
    //[self loadNextPage];
  
  
   }
  }
  /*
   called when user swipes left on the view
   */
  -(void)viewDetectedLeftSwipe:(PDFScrollView*)pdfScrollView withGesture:(UISwipeGestureRecognizer*)recognizer{
   NSLog(@"left");
   // if the end of the document isn't reached 
   if (currentPage&lt;pageCount){
    //increment current page
    currentPage++;
    // if a previous page has been loaded release it
    if (previousPage) {
     [previousPage release];
    }
    // assing the actual view to as a previous page  and retain it before it gets release by superview
    previousPage = [myScrollView retain];
    // remove the view from the super view 
    [myScrollView removeFromSuperview];
  
    // if a next page hasn't beeen loaded yet, load it on this thread
    if (!nextPage)
     [self loadNextPage];
  
    // assign the next page as the current page
    myScrollView = nextPage;
  
    // put the current page the delegate
    myScrollView.pdfViewDelegate = self;
  
    // add the current page to the super view
    [[self view] addSubview:myScrollView];
  
    // load a next page.
    [NSThread detachNewThreadSelector:@selector(loadNextPage) toTarget:self withObject:nil];
   //[self loadNextPage];
  
  
   }  
  
  }
  
  /*
   called when the user taps the screen
   */
  -(void)viewDetectedTapping:(PDFScrollView*)pdfScrollView withGesture:(UITapGestureRecognizer*)recognizer {
   NSLog(@"tapped");
   [myScrollView setZoomScale:1.0f animated:YES];
  
  
  }
  
  
  -(void)loadNextPage {
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
   CGPDFPageRef aPage =  CGPDFDocumentGetPage(pdf, currentPage+1);
   nextPage = [[PDFScrollView alloc] initWithFrame:myScrollView.frame andPDFPage:aPage ];
   [pool release];
  }
  
  
  
  -(void)loadPreviousPage {
  
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
   CGPDFPageRef aPage =  CGPDFDocumentGetPage(pdf, currentPage-1);
   previousPage = [[PDFScrollView alloc] initWithFrame:myScrollView.frame andPDFPage:aPage];
   [pool release];
  }
  @end
  </code></pre>
  
  <p>this is the code that the gestures trigger.</p>
  
  <pre><code>-(void)handleRightSwipe:(UIGestureRecognizer*)gesture {
  
  
      if ([pdfViewDelegate respondsToSelector:@selector(viewDetectedRightSwipe:withGesture:)]) {
          UISwipeGestureRecognizer *swipe = (UISwipeGestureRecognizer*)gesture;
          [pdfViewDelegate viewDetectedRightSwipe:self withGesture:swipe];
  
      }
  
  
  
  
  }
  -(void)handleLeftSwipe :(UIGestureRecognizer*)gesture{
  
  
      if ([pdfViewDelegate respondsToSelector:@selector(viewDetectedLeftSwipe:withGesture:)]) {
          UISwipeGestureRecognizer *swipe= (UISwipeGestureRecognizer*)gesture;
          [pdfViewDelegate viewDetectedLeftSwipe:self withGesture:swipe];
  
      }
  
  }
  </code></pre>
  
  <p><strong>Thanks in advance for your time</strong></p>