如何在UIImageView上绘制喷枪?

时间:2010-08-05 07:17:43

标签: iphone

我是iphone的涂料应用初学者。

为我的iphone App添加一个名为airbrush的新工具...

将喷涂在UIImageView上。任何人都可以帮我解决如何使用它。

2 个答案:

答案 0 :(得分:7)

Logic for air brush.........

- (UIBezierPath *)pathFromPoint:(CGPoint)start toPoint:(CGPoint)end {

    CGFloat lineWidth=10;
    redrawRect = CGRectMake(end.x-lineWidth,end.y-lineWidth,lineWidth*2,lineWidth*2);
    UIBezierPath *bezierPath = [UIBezierPath bezierPath];
    UIBezierPath *circle = [UIBezierPath bezierPathWithOvalInRect:redrawRect];
    NSInteger i, x, y;

    NSInteger modNumber =4*(int)lineWidth;
    for (i = 0; i < (lineWidth*lineWidth)/2; i++) {
        do {
            x = (random() % modNumber)+end.x - 2*lineWidth;
            y = (random() % modNumber)+end.y - 2*lineWidth;
        } while (![circle containsPoint:CGPointMake(x,y)]);

        [bezierPath appendPath:[UIBezierPath bezierPathWithRect:CGRectMake(x,y,0.5,0.5)]];
    }
    return bezierPath;
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];   
    currentPoint = [touch locationInView:self.view];
    currentPoint.y -=20;
    [self drawCircle];
}
-(void)drawCircle{
    UIGraphicsBeginImageContext(self.drawImage.frame.size);
    [drawImage.image drawInRect:CGRectMake(0,0, drawImage.frame.size.width, drawImage.frame.size.height)]; //originally self.frame.size.width, self.frame.size.height)];
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(),10);
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.0, 0.0, 0.0, 1.0);
    UIBezierPath *path=[self pathFromPoint:currentPoint 
                                   toPoint:currentPoint];
    [path stroke];
    lastPoint = currentPoint;
    CGContextStrokePath(UIGraphicsGetCurrentContext());
    CGContextFlush(UIGraphicsGetCurrentContext());
    drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
}

答案 1 :(得分:0)

我认为您可能正在寻找CGContextBeginPath及其相关功能。我不太确定如何定义一个新笔画,但我想它可以用[UIColor colorFromImage:myImage]之类的东西来处理。您应该查看Quartz 2D,尝试查看here

/托马斯