13

我有一个 UIView,我想在其中绘制一个延伸到 UIView 框架之外的 Circle,我已将 maskToBounds 设置为 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];

}

在此处输入图像描述

4

2 回答 2

20

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

UIView 和 NSView 在调用 drawRect: 方法之前自动配置视图的绘制环境。(在 AppKit 框架中,配置绘图环境称为锁定焦点。)作为此配置的一部分,视图类为当前绘图环境创建图形上下文。

此图形上下文是一个 Quartz 对象 (CGContext),其中包含绘图系统所需的信息,例如要应用的颜色、绘图模式(笔触或填充)、线宽和样式信息、字体信息和合成选项。(在 AppKit 中,NSGraphicsContext 类的对象包装了 CGContext 对象。)图形上下文对象与窗口、位图、PDF 文件或其他输出设备相关联,并维护有关该实体的绘图环境当前状态的信息. 视图使用与视图窗口关联的图形上下文进行绘制。对于视图,图形上下文将默认剪切区域设置为与视图边界重合,并将默认绘图原点置于视图边界的原点。

一旦设置了剪辑区域,您只能将其缩小。所以,你想要做的事情在 UIView drawRect 中是不可能的:。

于 2013-02-18T23:57:24.023 回答
0

我不确定这是否会解决您的问题,但需要研究一下。您self.layer.masksToBounds = NO每次输入时都在设置drawRect。您应该尝试在 init 方法中设置一次,A)因为没有必要多次这样做,B)因为在drawRect已经调用之后设置它可能存在问题 - 谁知道。

于 2013-02-18T23:17:16.850 回答