Цель C: Как мне сгладить кисть, как настоящую кисть? - PullRequest
2 голосов
/ 14 ноября 2011

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

вот мой код:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    touchSwiped = YES;
    UITouch *touch = [touches anyObject];   
    currentTouch = [touch locationInView:self.view];
    currentTouch.y -= 20;
    UIGraphicsBeginImageContext(self.view.frame.size);
    [touchDraw.image drawInRect:CGRectMake(0, 0, touchDraw.frame.size.width, touchDraw.frame.size.height)];
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 35.0);
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), redAmt, blueAmt, greenAmt, 1.0);
    CGContextBeginPath(UIGraphicsGetCurrentContext());
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), endingPoint.x, endingPoint.y);
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentTouch.x, currentTouch.y);
    CGContextStrokePath(UIGraphicsGetCurrentContext());
    touchDraw.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    endingPoint = currentTouch;

    touchMoved++;

    if (touchMoved == 10) {
        touchMoved = 0;
    }
}

Ответы [ 2 ]

2 голосов
/ 14 ноября 2011

Я не знаю, что вы сможете использовать сенсорные события для этого, не имея углы, которые вы описываете.Разрешение событий просто не достаточно дискретно.

OpenGL кажется более подходящим.Посмотрите пример кода от Apple *1003* GLPaint.

1 голос
/ 17 июля 2012

Попробуйте использовать quadCurve вместо addLineToPoint. Quad Curve сделайте линию в двух точках, которые не имеют угла, и сделайте вашу линию кривой ..

CGPoint midPoint(CGPoint p1,CGPoint p2)
        {
         return CGPointMake ((p1.x + p2.x) * 0.5,(p1.y + p2.y) * 0.5);
        }

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event//upon moving

{   
    mouseSwiped = YES;

    UITouch *touch = [touches anyObject];

    previousPoint2 = previousPoint1;
    previousPoint1 = currentTouch;
    currentTouch = [touch locationInView:self.view];

    CGPoint mid1 = midPoint(previousPoint2, previousPoint1); 
    CGPoint mid2 = midPoint(currentTouch, previousPoint1);

    // here's your ticket to the finals.. 
    CGContextMoveToPoint(context, mid1.x, mid1.y);
    CGContextAddQuadCurveToPoint(context, previousPoint1.x, previousPoint1.y, mid2.x, mid2.y);
    CGContextStrokePath(context)
}
...