2009-12-22 3 views
1

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

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint currentPoint = [touch locationInView:self.view]; 
    currentPoint.x = currentPoint.x; 
    currentPoint.y = currentPoint.y; 
    mouseSwiped = YES; 
    UIGraphicsBeginImageContext(self.view.frame.size); 
    [drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
    CGContextSetShouldAntialias(UIGraphicsGetCurrentContext(), YES); 
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), brushSizeVal); 
    CGContextSetAlpha(UIGraphicsGetCurrentContext(), drawingColorAlpha); 
    CGContextSaveGState(UIGraphicsGetCurrentContext()); //Probably right here 
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 
      drawingColorRed, // I want to draw nil here instead of these CGFloats that I have made 
      drawingColorGreen, // I want to draw nil here instead of these CGFloats that I have made 
      drawingColorBlue, // I want to draw nil here instead of these CGFloats that I have made 
      drawingColorAlpha); // I want to draw nil here instead of these CGFloats that I have made 
    CGContextBeginPath(UIGraphicsGetCurrentContext()); 
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), 
              lastPoint.x, 
              lastPoint.y); 
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), 
              currentPoint.x, 
              currentPoint.y); 
    CGContextStrokePath(UIGraphicsGetCurrentContext()); 
    drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); //drawImage is the UIImageView that I am drawing my context to 
    NSLog(@"current point x: %d current point y: %d",currentPoint.x, currentPoint.y); //Used for my purposes 
    lastPoint = currentPoint; 
    mouseMoved++; 

и

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    if (!optionsDisplayerVisible && canDraw) 
    { 
     if(!mouseSwiped) 
     { 
      UIGraphicsBeginImageContext(self.view.frame.size); 
      [drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
      CGContextSetShouldAntialias(UIGraphicsGetCurrentContext(), YES); 
      CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
      CGContextSetLineWidth(UIGraphicsGetCurrentContext(), brushSizeVal); 
      CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 
             drawingColorRed, 
             drawingColorGreen, 
             drawingColorBlue, 
             drawingColorAlpha); 
      CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
      CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
      CGContextStrokePath(UIGraphicsGetCurrentContext()); 
      CGContextFlush(UIGraphicsGetCurrentContext()); 
      drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); //drawImage is the UIImageView that I am drawing to 
      UIGraphicsEndImageContext(); 
     } 
    } 
} 

ответ

1

Ответ Колина Гисласона неверен. Если вы установили drawingColorAlpha в 0, он просто рисует невидимый цвет на существующем изображении.

Вот что работает.

//set this at the beginning 
CGContextSetLineCap(ctx,kCGImageAlphaNone); 
//after moving the point to your pen location: 
CGContextClearRect (ctx, CGRectMake(lastPoint.x, lastPoint.y, 10, 10)); 
-1

То, что вы хотите, не ноль, но цвет, который прозрачен. Если ваш UIImageView не отмечен как «непрозрачный» в IB, он должен отображаться в любых областях, где пиксели прозрачны.

+0

Нет, на самом деле я хочу, чтобы он стирал часть UIImageView – Jaba

+1

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

0

Что вы хотите сделать, это установить drawingColorAlpha в 0. Это создает прозрачный цвет, который эквивалентен стиранию. Вам также может потребоваться установить режим наложения, используя CGContextSetBlendMode(). kCGBlendModeNormal должен работать.

0

Установить режим смешивания следующим образом: CGContextSetBlendMode (UIGraphicsGetCurrentContext(), kCGBlendModeClear);

Надеюсь, это поможет u !! : P