正在使用不同的帧原点绘制CALayer子层。边界问题

时间:2013-04-13 19:24:23

标签: ios objective-c core-animation core-graphics calayer

我将一个CAShapeLayer作为subLayer添加到给定视图中的self.layer:

//balloonrect's value is this one
_balloonRect = CGRectMake(0, 55, 239, 118);

CAShapeLayer *balloonFrame = [CAShapeLayer layer];
balloonFrame.cornerRadius = 15.0f;
balloonFrame.frame = _balloonRect;
balloonFrame.fillColor = _balloonColor.CGColor;
balloonFrame.strokeColor = _balloonStrokeColor.CGColor;
balloonFrame.lineWidth = 5.0f;
balloonFrame.lineCap = kCALineCapRound;
balloonFrame.lineJoin = kCALineJoinRound;
balloonFrame.masksToBounds = YES;
UIBezierPath *fillPath = [UIBezierPath bezierPathWithRoundedRect: CGRectInset( _balloonRect, balloonFrame.lineWidth, balloonFrame.lineWidth) cornerRadius: 15.0f];
balloonFrame.path = fillPath.CGPath;

但是,无法理解为什么,形状是在 balloonRect 中指定的高度下绘制的,它看起来应该是110像素而不是55像素。 奇怪的是,如果我添加行

    balloonFrame.bounds = _balloonRect;

设置图层的框架后,一切似乎都很好,究竟发生了什么?为什么我必须设置界限,如果他们是自己的图层?

1 个答案:

答案 0 :(得分:0)

  1. balloonRect的高度不是55,它是118. CGRectMake转为(x-top-left, y-top-left, width, height)

  2. 更改某些内容的bounds以使非x-top-lefty-top-left移动其绘图原点,这样您就可以将绘图推到左边(实际上没有改变图层的大小)。

  3. 通过阅读本书中有关框架和边界的部分,您可能会得到帮助,从这里开始:http://www.apeth.com/iOSBook/ch14.html#_frame