如何重新调整UIBezierPath的大小和位置?

时间:2013-04-10 22:34:10

标签: iphone ios objective-c calayer cashapelayer

我有一个使用PocketSVG从SVG文件制作的UIBezierPath。

我想将我的UIBezierPath包含在CGShapeLayer中,并使用以下代码:

self.centerIconShapeLayer = [CAShapeLayer layer];
self.centerIconShapeLayer.frame = CGRectMake(5, 8, self.frame.size.width - 10, self.frame.size.height - 16);
self.centerIconShapeLayer.fillColor = [[UIColor redColor] CGColor];
self.centerIconShapeLayer.contentsRect = CGRectMake(600, 0, 100, 100);
self.centerIconShapeLayer.contentsGravity = kCAGravityCenter;
[self.layer addSublayer:self.centerIconShapeLayer];
self.centerIconShapeLayer.path = myBezierPath.CGPath;

这似乎不起作用,我的形状不会改变任何这些设置的大小或位置。

是否有一些我缺少的东西,在功能方面将其移动到位?

1 个答案:

答案 0 :(得分:1)

contentsGravity等功能与图层的contents有关。形状图层的contents path; path不受这些内容的约束。我建议你使用转换。或者,不要使用形状图层:只需将内容直接绘制到图层contents中(如果您需要有关如何操作的详细信息,请与我们联系。)

此外,您使用contentsRect错误。它不是以点数来衡量的,而是按比例来衡量的(每个点坐标都在0到1之间 - 好吧,它比这更复杂,但这是基本的想法)。

我试过的例子,只是为了让你开始(这是在一个视图控制器中,你将不得不调整我在这里做的一切!):

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    self.centerIconShapeLayer = [CALayer layer]; // ordinary layer
    self.centerIconShapeLayer.frame = 
        CGRectMake(5, 8, self.view.frame.size.width - 10, self.view.frame.size.height - 16);
    self.centerIconShapeLayer.delegate = self;
    [self.view.layer addSublayer:self.centerIconShapeLayer];
    // self.centerIconShapeLayer.contentsRect = CGRectMake(0, 0, 0.3, 0.3);
    [self.centerIconShapeLayer setNeedsDisplay];
}

-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
    UIBezierPath* myBezierPath = 
        [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0,0,100,100) cornerRadius:20];
    CGContextAddPath(ctx,myBezierPath.CGPath);
    CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);
    CGContextFillPath(ctx);
}

运行它,你会看到红色圆角矩形。现在取消注释contentsRect行,您将看到它确实可以拉伸红色圆角矩形。

当然,你必须用你自己的bezier路径来代替;这只是一个示例,向您展示如何将贝塞尔路径的路径直接绘制到图层中。

有关如何直接绘制图层的更多信息,请参阅本书的这一部分:

http://www.apeth.com/iOSBook/ch16.html#_drawing_in_a_layer

有关绘制到上下文中的更多信息,请参阅本书的“绘图”一章,从这里开始:

http://www.apeth.com/iOSBook/ch15.html#_paths_and_drawing