我要做的是使用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];
}
答案 0 :(得分:1)
视图无法在自己的边界之外绘制。这就是为什么你的UIBezierPath
没有出现的原因。
如果超级层的maskstoBounds
属性为NO,则图层可以在其超层边界之外绘制。 masksToBounds
属性对应于视图的clipsToBounds
属性,默认值为NO
。