2011-11-29 67 views
4

我在屏幕上有9个六角形精灵,我必须指定一个特定的路径来使它们的区域可以触摸。我不想为每个单独的路径设置坐标,所以我不能只使用第一个路径(六边形都是相同的大小)并将其原点移动到另一个位置(不破坏形状)? (如果我现在这样做,CGPathAddLineToPoint();添加以前的六角形六角形的点,我希望我的想法跨越...(见图片...注意:右上角的灰色八角形是精确相同的尺寸和形状为黑的)[移动路径的坐标和形状] [1]移动CGPathCreateMutable(),使路径保持不变?

hex2TouchArea = CGPathCreateMutable();!

CGPathMoveToPoint(hex2TouchArea, NULL, 150,157); 
    CGPathAddLineToPoint(hex2TouchArea, NULL, 130, 198); 
    CGPathAddLineToPoint(hex2TouchArea, NULL, 146, 236); 
    CGPathAddLineToPoint(hex2TouchArea, NULL, 195, 236); 
    CGPathAddLineToPoint(hex2TouchArea, NULL, 218, 197); 
    CGPathAddLineToPoint(hex2TouchArea, NULL, 193, 157); 
    CGPathCloseSubpath(hex2TouchArea); 

这里我把一个图像示出它的图像
http://666kb.com/i/bz2ysevuw8n65rh3i.gif

* 编辑:我从帖子中得到了解决方案,并改变了它一点点:*

-(CGMutablePathRef) drawHexagon:(CGPoint)origin 
{ 
    //create mutable path 
    CGMutablePathRef path = CGPathCreateMutable(); 

    CGPathMoveToPoint(path, nil, origin.x, origin.y); 

    CGPoint newloc = CGPointMake(origin.x - 20, origin.y + 42); 
    CGPathMoveToPoint(path, NULL, newloc.x, newloc.y); 
    CGPathAddLineToPoint(path, NULL, newloc.x + 16,newloc.y + 38); 
    CGPathAddLineToPoint(path, NULL, newloc.x + 49, newloc.y + 0); 
    CGPathAddLineToPoint(path, NULL, newloc.x + 23, newloc.y - 39); 
    CGPathAddLineToPoint(path, NULL, newloc.x - 25,newloc.y - 40); 
    CGPathAddLineToPoint(path, NULL, newloc.x -43, newloc.y + 0); 
    CGPathCloseSubpath(path); 
    return path; 

} 

回答

6

重用的路径可能使一个方法对他们的最好办法。 创建一个添加开始坐标的地方,并返回一个CGMutablePathRef,以便在路径完成后绘制它。

这里是什么看起来像基于你把你的问题的例子路径:

-(CGMutablePathRef) drawHexagon:(CGPoint)origin 
{ 
    //create mutable path 
    CGMutablePathRef path = CGPathCreateMutable(); 

    CGPathMoveToPoint(path, nil, origin.x, origin.y); 

    CGPoint newloc = CGPointMake(origin.x - 20, origin.y + 42); 
    CGPathMoveToPoint(path, nil, newloc.x, newloc.y); 
    CGPoint newloc = CGPointMake(newloc.x + 16, newloc.y + 38); 
    CGPathMoveToPoint(path, nil, newloc.x, newloc.y); 
    CGPoint newloc = CGPointMake(newloc.x + 49, newloc.y + 0); 
    CGPathMoveToPoint(path, nil, newloc.x, newloc.y); 
    CGPoint newloc = CGPointMake(newloc.x + 23, newloc.y - 39); 
    CGPathMoveToPoint(path, nil, newloc.x, newloc.y); 
    CGPoint newloc = CGPointMake(newloc.x - 25, newloc.y - 40); 
    CGPathMoveToPoint(path, nil, newloc.x, newloc.y); 
    CGPoint newloc = CGPointMake(newloc.x - 43, newloc.y + 0); //which should be you origin 
    CGPathMoveToPoint(path, nil, newloc.x, newloc.y); 

    CGPathCloseSubpath(path); 
    return path; 
} 

CGMutablePathRef path = [self drawHexagon:someStartingPoint];


Editted调用它应有的评论:

你可以添加到上下文的路径:CGContextAddPath(context, path); 然后绘制它,但你觉得,例如像这样:CGContextDrawPath(context, kCGPathFill);

将路径添加到上下文后,它不应该很难。

这应该适合你。祝你好运。

+0

非常感谢!你是男人!你能告诉我如何填补这条路吗?我不明白它的作用... –

+0

你可以添加上下文的路径:CGContextAddPath(context,path);然后画出它,但是你感觉像这样:CGContextDrawPath(context,kCGPathFill);在向上下文添加路径后,它不应该很难。 –

+0

哇......我很抱歉,如果我讨厌你,但我尝试了一切,我无法得到它的工作:( –