特定のビューで 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で指定された高さの下に描画され、本来の 55 ピクセルではなく 110 ピクセルのように見えます。奇妙なことに、行を追加すると
balloonFrame.bounds = _balloonRect;
レイヤーのフレームを設定した後、すべて問題ないように見えますが、正確には何が起こっているのでしょうか? レイヤー自身の場合、境界を設定する必要があるのはなぜですか?