为什么我的UIBeizerPath对象没有绘制与我的CALayer对象相同的矩形边界?

时间:2012-10-09 20:00:22

标签: objective-c ios cocoa-touch

我要做的是使用UIBezierPath drawRectWithRounderCorners方法在视图周围绘制一个框架。所以我决定做的是从draw rect方法中取出rect,使用值为负的UIEdgesInset对象并尝试绘制它。到目前为止,UIBezierPath对象没有绘制在传递给绘制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];
}

1 个答案:

答案 0 :(得分:1)

视图无法在自己的边界之外绘制。这就是为什么你的UIBezierPath没有出现的原因。

如果超级层的maskstoBounds属性为NO,则图层可以在其超层边界之外绘制。 masksToBounds属性对应于视图的clipsToBounds属性,默认值为NO