画一条直线iOS

时间:2012-09-21 09:07:33

标签: ios touch line

我正在使用此代码绘制一条直线(显然是在用户触摸上),我需要显示从起点直到用户握住触摸(未触摸结束)的直线,就像来自的橡皮筋一样起点,跟随手指移动到哪里。我可能忽略了一些我需要修改以创造必要效果的东西。任何的想法?

注意:我在View Controller中。

- (void) drawLine:(UIPanGestureRecognizer *)sender
{

    NSLog(@"Sender : %@", sender);
    CGPoint currentPoint;

    //CGAffineTransformMakeScale(lastScale, lastScale);
    if([(UIPanGestureRecognizer *)sender state] == UIGestureRecognizerStateBegan ||                                       [(UIPanGestureRecognizer *)sender state] == UIGestureRecognizerStateChanged)
    {
        currentPoint = [(UIPanGestureRecognizer *)sender locationInView:imgView];

        previousPoint = currentPoint;
    }

    if([(UIPanGestureRecognizer *)sender state] == UIGestureRecognizerStateChanged) 
    { 
        touchedPoint = [(UIPanGestureRecognizer *)sender locationInView:imgView]; 
        [imgView setNeedsDisplay]; 
    }

    if([(UIPanGestureRecognizer *)sender state] == UIGestureRecognizerStateEnded)
    {
        currentPoint = [(UIPanGestureRecognizer *)sender locationInView:imgView];
        imgView.image =  [self drawLineFromPoint:previousPoint toPoint:currentPoint   image:imgView.image];

        previousPoint = currentPoint;

    }

}

这是[drawline frompoint:topoint:]方法

UIGraphicsBeginImageContext(imgView.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();       
CGContextSaveGState(context);

CGContextTranslateCTM(context, 0.0, imgView.frame.size.height);
CGContextScaleCTM(context, 1.0, -1.0);

CGContextSetShouldAntialias(context, YES);
CGContextSetLineWidth(context, 1.0f);
CGContextSetRGBStrokeColor(context, 0.7, 0.7, 0.7, 1.0);

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

CGContextRestoreGState(context);

NSLog(@"frompoint.x : %f, frompoint.y : %f",fromPoint.x, fromPoint.y );
NSLog(@"topoint.x : %f, topoint.y : %f", toPoint.x, toPoint.y);

UIImage *ret = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

1 个答案:

答案 0 :(得分:3)

DrawingApp这是我发现的一个示例项目,可以满足需要。

另一种方法是,正如Lefteris在评论中建议的那样,在UIView中,覆盖触摸开始,移动和结束。并使用drawRect绘制线条。该线将拖动到您当前触摸的任何位置。