在UIView外面画画

时间:2013-02-18 23:12:57

标签: ios uiview

我有一个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];

}

enter image description here

2 个答案:

答案 0 :(得分:19)

来自http://developer.apple.com/library/ios/#documentation/general/conceptual/Devpedia-CocoaApp/DrawingModel.html

  

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之后设置它可能存在问题叫 - 谁知道。