0

私がやろうとしているのは、UIBezierPathdrawRectWithRounderCorners メソッドを使用して、ビューの周りにフレームを描画することです。そこで、draw rect メソッドから rect を取得し、UIEdgesInset負の値を持つオブジェクトを適用して、そのように描画しようとしました。これまでのところ、UIBezierPathオブジェクトは draw rect に渡された rect の境界外に描画されていません。オブジェクトに同じ四角形を適用すると、CALayer必要に応じてレイヤーが描画されます。UIBezierPathでは、オブジェクトと同じ長方形をオブジェクトに描画させることができないのはCALayerなぜですか?

- (void)drawRect:(CGRect)rect {
    [super drawRect:rect];
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:
               UIEdgeInsetsInsetRect(rect, UIEdgeInsetsMake(-5,-5, -5, -5)) 
           byRoundingCorners:UIRectCornerTopLeft|UIRectCornerBottomLeft
                 cornerRadii:CGSizeMake(5, 5)];

    [[UIColor blueColor]setFill];
    [[UIColor blueColor]setStroke];
    [path stroke];
    [path fill];

    CALayer *backGround = [CALayer layer];
    [backGround setOpacity:.2];
    [backGround setFrame:UIEdgeInsetsInsetRect(rect, 
                                   UIEdgeInsetsMake(-5,-5, -5, -5))];
    [backGround setBackgroundColor:[UIColor greenColor].CGColor];
    [self.layer addSublayer:backGround];
}
4

1 に答える 1

1

ビューは、それ自体の境界の外に描画することはできません。UIBezierPathそれがあなたが現れない理由です。

maskstoBoundsスーパーレイヤーのプロパティが NOの場合、レイヤーはそのスーパーレイヤーの境界の外に描画できます。masksToBoundsプロパティはビューのプロパティに対応し、clipsToBoundsデフォルト値は ですNO

于 2012-10-09T21:48:51.487 に答える