我有一个UIView,我想绘制一个延伸超过UIView框架的圆圈, 我已将masksToBounds设置为NO - 期望我可以在UIView的边界之外向右和底部绘制5个像素。
我希望椭圆不会被剪裁但是它会被修剪掉并且不会超出边界?
- (void)drawRect:(CGRect)rect
{
int width = self.bounds.size.width;
int height = self.bounds.size.height;
self.layer.masksToBounds = NO;
//// Rounded Rectangle Drawing
//// Oval Drawing
UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(0, 0, width+5, height+5)];
[[UIColor magentaColor] setFill];
[ovalPath fill];
[[UIColor blackColor] setStroke];
ovalPath.lineWidth = 1;
[ovalPath stroke];
}
答案 0 :(得分:19)
UIView和NSView自动配置a的绘图环境 在调用drawRect:方法之前查看。 (在AppKit框架中, 配置绘图环境称为锁定焦点。)作为一部分 在此配置中,视图类为其创建图形上下文 当前的绘图环境。
此图形上下文是包含的Quartz对象(CGContext) 绘图系统需要的信息,例如要应用的颜色, 绘图模式(笔触或填充),线宽和样式信息, 字体信息和合成选项。 (在AppKit中,一个对象 NSGraphicsContext类包装CGContext对象。)图形 上下文对象与窗口,位图,PDF文件或其他相关联 输出设备并维护有关当前状态的信息 绘制该实体的环境。视图使用图形绘制 与视图窗口关联的上下文。 对于视图,图形 context将默认剪切区域设置为与视图一致 边界并将默认绘图原点放在视图的原点 边界。强>
设置剪裁区域后,您只能将其缩小。所以,在UIView drawRect:。
中,你想要做的事情是不可能的答案 1 :(得分:0)
我不确定这会解决您的问题,但需要深思。您每次输入self.layer.masksToBounds = NO
时都要设置drawRect
。您应该尝试在init方法中设置一次,而不是A),因为它不需要多次执行它而且B)因为在drawRect
之后设置它可能存在问题叫 - 谁知道。