2010-08-05 3 views
3

Я начинаю работать над приложением краски на iphone.Как нарисовать аэрограф на UIImageView?

добавления нового инструмента для моего Iphone App называется аэрография ...

, который распыляют на UIImageView. может кто-нибудь помочь мне, как с этим работать.

+0

Что вы имеете в виду меловой линии? – Plumenator

+0

спасибо, плеера для повтора .... на самом деле я хочу нарисовать аэрограф на моем UIImageView ... – kiran

ответ

0

Я думаю, вы могли бы искать CGContextBeginPath и связанные с ним функции. Я не совсем уверен, как определить новый штрих, но я полагаю, что с ним можно справиться с чем-то вроде [UIColor colorFromImage:myImage]. Вы должны посмотреть в Quartz 2D, попробуйте посмотреть here.

/Thomas

+0

Спасибо Thomas ..... Есть ли какой-либо метод, чтобы нарисовать линию, как мел. – kiran

+1

Это не прогулка в парке. Вы должны иметь возможность сделать обычное перо (штрих) каким-то образом с помощью Quartz 2D API. Если вы не можете найти функциональность API для этого, я бы предпочел бы, чтобы вы могли загрузить изображение (круглый белый для мела) и постоянно рисовать его на изображении, когда пользователь касается изображения. Вам нужно будет использовать 'touchhesBegan: withEvent:' в UIResponder или вы можете сделать распознаватели жестов: http://developer.apple.com/iphone/library/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/GestureRecognizers/GestureRecognizers. HTML –

+0

спасибо ...... Томас .... – kiran

6
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(); 
} 
+0

В методе drawCircle, может быть, вы имеете в виду: UIBezierPath * path = [self pathFromPoint: lastPoint toPoint: currentPoint]; ? – Quentin

+0

нет обоих одинаковых точек, чтобы сбрызнуть сразу место! – kiran

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