Вопрос по ios5, ios – UIBezierPath не рисует гладкую кривую
Я использую 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, вы увидите, что кривая не является гладкой. Что я должен сделать, чтобы получить плавную криву
myPath.miterLimit=-10;
.
Измените значение, если вам нужно что-то, что принимает значение с плавающей запятой
kCGLineJoinRound
попробуй это
The iOSDev
addLinePoint
так, очевидно, вы получаете линии, а не кривые. Вас заинтересуют другие методы, чтобы получить плавные кривые: AddCurveToPoint или AddQuadCurveToPoint. Но, как вы можете видеть из API, помимо точек, которые вы на самом деле рисуете пальцем, вам также нужны контрольные точки, которые не появляются на чертеже. Даже Photoshop просит вас перемещать их при выполнении кривизны. Другими словами, чтобы сделать рисование вашей руки гладким "автоматически", нужно немало математики. Google "сглаживание рисованной", и вы получите по крайней мере эти точки, чтобы начать с
Смягчение рисованной свободной формы
Это действительно не специфично для iOS.