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.