Вопрос по ios5, ios – UIBezierPath не рисует гладкую кривую

2

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

- (void)drawRect:(CGRect)rect
{    
    [[UIColor redColor] setStroke];
    for (UIBezierPath *_path in pathArray) 
    [_path strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];
}

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

    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];    
}

Вот изображение

На изображении выше, если вы видите буквы a и d, вы увидите, что кривая не является гладкой. Что я должен сделать, чтобы получить плавную криву

Ваш Ответ

2   ответа
3

myPath.miterLimit=-10;.

Измените значение, если вам нужно что-то, что принимает значение с плавающей запятой

Привет, аалок, рад снова тебя видеть, эй, твой трюк не работает, спайков больше нет, но кривая не плавная, я использую твой код, который ты дал ссылку вчера Ranjit
да, ты прав, кривые не такие гладкие The iOSDev
Так как с этим бороться, я борюсь с утра.: Ranjit
yes должны оптимизировать его для гладких углов. Давайте попробуем найти способ сделать это. нужно некоторое исследование для этого. и это требует времени The iOSDev
i обнаружил, что изменение в linecapstyle делает некоторую работу, но не очень хорошее сглаживание, но некоторая плавность достигается с помощьюkCGLineJoinRound попробуй это The iOSDev
4

addLinePoint так, очевидно, вы получаете линии, а не кривые. Вас заинтересуют другие методы, чтобы получить плавные кривые: AddCurveToPoint или AddQuadCurveToPoint. Но, как вы можете видеть из API, помимо точек, которые вы на самом деле рисуете пальцем, вам также нужны контрольные точки, которые не появляются на чертеже. Даже Photoshop просит вас перемещать их при выполнении кривизны. Другими словами, чтобы сделать рисование вашей руки гладким "автоматически", нужно немало математики. Google "сглаживание рисованной", и вы получите по крайней мере эти точки, чтобы начать с

Смягчение рисованной свободной формы

Сглаживание рисованной кривой

Это действительно не специфично для iOS.

Привет, спасибо за твой ответ, но все идет над моей головой. Ranjit

Похожие вопросы