移动CGPathCreateMutable()以使路径保持不变?

时间:2011-11-29 12:03:04

标签: objective-c cgpath

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

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;   

}

1 个答案:

答案 0 :(得分: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];

进行调用

编辑到期评论:

您可以使用以下代码添加上下文的路径:CGContextAddPath(context, path); 然后按照您的意愿绘制它,例如:CGContextDrawPath(context, kCGPathFill);

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

这对你有用。祝你好运。