类似的功能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
行,您会发现它确实可以拉伸红色圆角矩形。
当然,您将不得不替换自己的贝塞尔路径;这只是一个示例,向您展示如何将贝塞尔路径的路径直接绘制到图层中。
有关如何直接绘制到图层中的更多信息,请参阅我书中的这一部分:
http://www.aeth.com/iOSBook/ch16.html#_drawing_in_a_layer
有关一般绘图的更多信息,请参阅我的书的绘图章节,从这里开始:
http://www.aeth.com/iOSBook/ch15.html#_paths_and_drawing