2013-03-12 2 views
11

Я рисую форму UIBezierPath в touchhesMoved.Как заполнить цвет внутри UIBezierPath?

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    secondPoint = firstPoint; 
    firstPoint = [touch previousLocationInView:self]; 
    currentPoint = [touch locationInView:self]; 

    CGPoint mid1 = midPoint(firstPoint, secondPoint); 
    CGPoint mid2 = midPoint(currentPoint, firstPoint); 

    [bezierPath moveToPoint:mid1]; 
    [bezierPath addQuadCurveToPoint:mid2 controlPoint:firstPoint]; 

    [self setNeedsDisplay]; 
} 

Я хочу заполнить красный цвет внутри него после закрытия, но не может. Пожалуйста помоги!

- (void)drawRect:(CGRect)rect 
{ 
    UIColor *fillColor = [UIColor redColor]; 
    [fillColor setFill]; 
    UIColor *strokeColor = [UIColor blueColor]; 
    [strokeColor setStroke]; 
    [bezierPath closePath]; 
    [bezierPath fill]; 
    [bezierPath stroke]; 
} 
+0

Не похоже, что вы на самом деле поглаживаете путь, поэтому некому закрыть. – Abizern

+1

Не могли бы вы дать ответ. Я так не понимаю. Благодаря! –

+0

Позвольте мне угадать? вы не получаете форму, просто линию? Каждый раз, когда ваш прикосновение перемещается, он закрывает текущий подпуть. – Abizern

ответ

16

Если у вас есть путь Безье, хранящийся в другом месте, это должно работать:

Редактировать

Глядя на отредактированный коде, что происходит в том, что, как вы закрываете путь, который вы рисуете, закрывается, поэтому вы получаете линию, а не форму, так как у вас есть только две точки.

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

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    secondPoint = firstPoint; 
    firstPoint = [touch previousLocationInView:self]; 
    currentPoint = [touch locationInView:self]; 

    CGPoint mid1 = midPoint(firstPoint, secondPoint); 
    CGPoint mid2 = midPoint(currentPoint, firstPoint); 

    [bezierPath moveToPoint:mid1]; 
    [bezierPath addQuadCurveToPoint:mid2 controlPoint:firstPoint]; 

    // pathToDraw is an UIBezierPath * declared in your class 
    pathToDraw = [[UIBezierPath bezierPathWithCGPath:bezierPath.CGPath]; 

    [self setNeedsDisplay]; 
} 

И тогда ваш код рисования может:

- (void)drawRect:(CGRect)rect { 
    UIColor *fillColor = [UIColor redColor]; 
    [fillColor setFill]; 
    UIColor *strokeColor = [UIColor blueColor]; 
    [strokeColor setStroke]; 

    // This closes the copy of your drawing path. 
    [pathToDraw closePath]; 

    // Stroke the path after filling it so that you can see the outline 
    [pathToDraw fill]; // this will fill a closed path 
    [pathToDraw stroke]; // this will stroke the outline of the path. 

} 

Существуют некоторые прибирать к делать touchesEnded и это может быть сделал более совершенным, но вы поняли эту идею.

+0

Как заполнить цвет для закрытого bezirepath на CAShapelayer.For меня это всегда черный цвет. – Madhu

-3

Вы должны хранить массив своих UIBezierPath. Попробуйте этот код,

- (void)drawRect:(CGRect)rect 
    { 

     for(UIBezierPath *_path in pathArray){ 


     [_path fill]; 
     [_path stroke]; 
     } 
    } 

    #pragma mark - Touch Methods 
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
    { 
     myPath=[[UIBezierPath alloc]init]; 
     myPath.lineWidth = currentSliderValue; 

     UITouch *mytouch=[[touches allObjects] objectAtIndex:0]; 
     [myPath moveToPoint:[mytouch locationInView:self]]; 
     [pathArray addObject:myPath]; 
    } 
    -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
    { 
     UITouch *mytouch=[[touches allObjects] objectAtIndex:0]; 
     [myPath addLineToPoint:[mytouch locationInView:self]]; 
     [self setNeedsDisplay]; 

    } 
+0

Он не отвечает на вопрос о заполнении пути. Это просто законченный код для рисования линии с касаниями. – Abizern

+0

Код в drawrect - это код, который используется для заполнения рисунка. –