2013-05-08 6 views
-1

Я рисую прямую линию, и я хочу сделать ее таким образом, что, когда движение касания мало (например, 10 пикселей), начальная точка (fromPoint) чем оставаться на первом касании.Переместить начальную точку линии

- (void)drawRect:(CGRect)rect { 

    CGPoint fromPoint; 
    CGPoint toPoint; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextSetLineWidth(context, 2.0); 
    CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB(); 
    CGFloat components[] = {0.0, 0.0, 1.0, 1.0}; 
    CGColorRef color = CGColorCreate(colorspace, components); 
    CGContextSetStrokeColorWithColor(context, color); 
    CGContextSetLineCap(context, kCGLineCapRound); 

    CGContextMoveToPoint(context, fromPoint.x, fromPoint.y); 
    CGContextAddLineToPoint(context, toPoint.x, toPoint.y); 
    CGContextStrokePath(context); 

    CGColorSpaceRelease(colorspace); 
    CGColorRelease(color); 

} 


//touch event 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    UITouch* touch = [touches anyObject]; 
    fromPoint = [touch locationInView:self]; 
    toPoint = [touch locationInView:self]; 

    [self setNeedsDisplay]; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 

    UITouch* touch = [touches anyObject]; 
    toPoint = [touch locationInView:self]; 

    // ***** not working ****** 
    // when touch movement is small (e.g 10 pixel), the starting point will follow the touch rather than staying at the first touch 
    if (fabs(_draw.toPoint.x - _draw.fromPoint.x) < 10 && fabs(_draw.toPoint.y - _draw.fromPoint.x) < 10){ 

    UITouch* touch = [touches anyObject]; 
    fromPoint = [touch locationInView:self]; 
    toPoint = [touch locationInView:self]; 

    }; 

    //************************// 

    [self setNeedsDisplay]; 

} 


- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 

    UITouch* touch = [touches anyObject]; 
    toPoint = [touch locationInView:self]; 

    [self setNeedsDisplay]; 

} 

UPDATE: Цель состоит в том, чтобы сделать небольшую корректировку начальной точки, когда реализуется увеличительное стекло.

ответ

0

Это не работает, потому что, если вы не двигаете пальцем очень быстро, вы не можете различать небольшие движения и большие движения.

Вы можете попробовать запустить таймер в touchhesBegan и использовать его для определения скорости движения, из которой вы можете установить некоторые параметры между медленным и быстрым касанием.

Вы даже можете использовать UIPanGestureRecognizer, который будет определять скорость для вас.

+0

любая ссылка/учебник о том, как получить скорость движения? – askingtoomuch

Смежные вопросы