ios ios5 core-graphics uibezierpath

ios - UIBezierPath no dibuja una curva suave



ios5 core-graphics (2)

Estoy usando UIBezierPath para dibujar, y he escrito el código sobre eventos táctiles y funciona bien, pero mis curvas no son uniformes, cuando muevo el dedo y dibujo una curva, no son lisas.

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

Aquí está la imagen

En la imagen de arriba, si ves las letras a y d, verás que la curva no es lisa. ¿Qué debería hacer para obtener una curva suave?


Solo usa esta linea resolverá tu problema myPath.miterLimit=-10; .

Cambie el valor si necesita algo que le tome valor flotante


Bueno, estás usando addLinePoint así que obviamente obtienes líneas, no curvas. Usted estaría interesado en otros métodos para darle curvas suaves: addCurveToPoint o addQuadCurveToPoint . Pero como puede ver en la API, además de los puntos que está dibujando con el dedo, también necesita puntos de control que no se liberen con el dibujo. Incluso Photoshop le pide que los mueva cuando haga curvatura. En otras palabras, hacer que su mano dibuje sin problemas "automágicamente" implica bastante matemáticas. Google "suavizar dibujado a mano" y obtendrá al menos estos puntos para comenzar con

Alisar una forma libre dibujada a mano

Alisar una curva dibujada a mano

Realmente no es iOS específico en absoluto.