Я рисую прямую линию, и я хочу сделать ее таким образом, что, когда движение касания мало (например, 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: Цель состоит в том, чтобы сделать небольшую корректировку начальной точки, когда реализуется увеличительное стекло.
любая ссылка/учебник о том, как получить скорость движения? – askingtoomuch