2013-02-12 85 views
0

我在UIScrollView上有一個圖形視圖。用兩個手指手勢滾動

我想要做的是用一根手指畫線,然後用兩根手指滾動。

繪圖視圖是通過touchesMoved畫線如下。

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch; 
    CGPoint lastTouch, currentTouch; 

    for (touch in touches) 
    { 
     lastTouch = [touch previousLocationInView:self]; 
     currentTouch = [touch locationInView:self]; 

     CGContextRef ctx = CGLayerGetContext(drawLayer); 
     CGContextBeginPath(ctx); 
     CGContextMoveToPoint(ctx, lastTouch.x, lastTouch.y); 
     CGContextAddLineToPoint(ctx, currentTouch.x, currentTouch.y); 
     CGContextStrokePath(ctx); 
    } 

    [self setNeedsDisplay]; 
} 

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    CGContextDrawLayerInRect(drawContext, self.bounds, drawLayer); 
    CGContextClearRect(CGLayerGetContext(drawLayer), self.bounds); 
    [self setNeedsDisplay]; 
} 

和一個的viewController,

_scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 
    [_scrollView setContentSize:CGSizeMake(320, 800)]; 
    [self.view addSubview:_scrollView]; 

    _drawingView = [[DrawingView alloc] initWithFrame:CGRectMake(0, 0, 320, 800)]; 
    [_scrollView addSubview:_drawingView]; 

    for (UIGestureRecognizer *gestureRecognizer in _scrollView.gestureRecognizers) 
    { 
     if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) 
     { 
      UIPanGestureRecognizer *panGR = (UIPanGestureRecognizer *) gestureRecognizer; 
      panGR.minimumNumberOfTouches = 2; 
     } 
    } 

它可以在模擬器卻可以繪製是一個真正的設備上太慢。什麼是錯誤的和任何建議?

Ty!

回答

0

我解決了。

  1. 不應該用[self setNeedsDisplay]繪製整個屏幕。應該繪製一個需要重繪的區域[self setNeedsDisplay withRect:]

  2. 比touchesBegin〜End更好地使用panGesture識別器。 touchesBegin和touchesEnd之間有延遲。