Scrolling with two fingers with a UIScrollView

后端 未结 14 606
长发绾君心
长发绾君心 2020-11-29 21:29

I have an app where my main view accepts both touchesBegan and touchesMoved, and therefore takes in single finger touches, and drags. I want to im

14条回答
  •  独厮守ぢ
    2020-11-29 22:04

    What I do is have my view controller set up the scroll view:

    [scrollView setCanCancelContentTouches:NO];
    [scrollView setDelaysContentTouches:NO];
    

    And in my child view I have a timer because two-finger touches usually start out as one finger followed quickly by two fingers.:

    - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        // Hand tool or two or more touches means a pan or zoom gesture.
        if ((selectedTool == kHandToolIndex) || (event.allTouches.count > 1)) {
            [[self parentScrollView] setCanCancelContentTouches:YES];
            [firstTouchTimer invalidate];
            firstTouchTimer = nil;
            return;
        }
    
        // Use a timer to delay first touch because two-finger touches usually start with one touch followed by a second touch.
        [[self parentScrollView] setCanCancelContentTouches:NO];
        anchorPoint = [[touches anyObject] locationInView:self];
        firstTouchTimer = [NSTimer scheduledTimerWithTimeInterval:kFirstTouchTimeInterval target:self selector:@selector(firstTouchTimerFired:) userInfo:nil repeats:NO];
        firstTouchTimeStamp = event.timestamp;
    }
    

    If a second touchesBegan: event comes in with more than one finger, the scroll view is allowed to cancel touches. So if the user pans using two fingers, this view would get a touchesCanceled: message.

提交回复
热议问题