2013-05-28 105 views
0

需要石英2d的一些帮助,这对我来说是全新的。iOS多次绘制相同的形状

基本上我的应用程序需要按照触摸,从中心多次绘制该行。问题是它必须是动态的,线条必须平均分布(类似于从中心开始的章鱼)。我在android上的方式是记住数组中的形状路径,而不是通过旋转坐标系多次绘制它,但我无法弄清楚如何在iOS上执行它。

我的旋转功能

- (void) rotateContext:(int)angle 
{ 


    CGContextTranslateCTM(UIGraphicsGetCurrentContext(), self.center.x, self.center.y); 
    CGContextRotateCTM(UIGraphicsGetCurrentContext(), radians(angle)); 
    CGContextTranslateCTM(UIGraphicsGetCurrentContext(), -self.center.x, -self.center.y); 


} 

它只是如果我尝试做做它的drawRect(),它旋转所有的路径与它的工作原理。

你能否给我一个解决问题的好方法?

感谢

+0

如果您要使用在屏幕上反复绘制的相同形状,则应该使用CGLayers。 [查看官方文档了解更多信息。](https://developer.apple.com/library/mac/#documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_layers/dq_layers.html) – Lefteris

回答

0

这可能导致你的解决方案: (也许它甚至编译)

/* setup the context */ 
UIBezierPath *bpath = [UIBezierPath bezierPath]; 
UIBezierPath *subpath = 
[UIBezierPath bezierPathWithOvalInRect:<#some rect#>]; 
[bpath appendPath:subpath]; 
/* add more stuff to the path as you wish */ 

bezierPath.lineWidth = 2;  
/* draw the same path rotated multiple times */ 
for(NSInteger i = 0; i < 4; i++) { 
    [bpath applyTransform:CGAffineTransformMakeRotation(M_PI_2 * i)]; 
    [bpath stroke]; 
} 
/* teardown the context */ 

旋转贝塞尔是棘手的,你需要根据应用更复杂的转换关于你期望的结果。

那些贝塞尔路径对象可以存储在一个数组或任何你需要的东西。

+0

谢谢,看起来很有希望,会尝试早上!你知道一个很好的资源来理解上下文部分吗?我在苹果网站上阅读它,但它有点混乱。 – user2067051

+0

谷歌是否禁止在你的国家或什么?只需搜索“核心图形”,然后搜索书籍,教程等,就会看到很多资源。再读一遍苹果文档,他们不会混淆,只是低级别的图形并不容易。 – djromero