0

特定のビューで 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;

レイヤーのフレームを設定した後、すべて問題ないように見えますが、正確には何が起こっているのでしょうか? レイヤー自身の場合、境界を設定する必要があるのはなぜですか?

4

1 に答える 1

0
  1. の高さballoonRectは 55 ではなく、118 です。CGRectMake は(x-top-left, y-top-left, width, height).

  2. boundsゼロ以外になるように何かの を変更し、その描画原点x-top-lefty-top-leftシフトすると、(レイヤーのサイズを実際に変更することなく) 描画を左に押し上げることになります。

フレームと境界に関する私の本のセクションを読むと、助けになるかもしれません: http://www.apeth.com/iOSBook/ch14.html#_frame

于 2013-04-13T19:26:54.133 に答える