在iOS上,drawRect无法在视图边界之外绘制?

nop*_*ole 20 calayer uikit uiview ios

我从某种角度考虑OS X,对iOS来说总是如此,那些内容可以出现在视图的界限之外吗?(对于UIView)但是,如果我创建一个全新的单视图应用程序,并创建一个子类UIView的MyView类,并实现其drawRect:

- (void)drawRect:(CGRect)rect
{
    // Drawing code
    UIBezierPath *path = [UIBezierPath bezierPathWithRect:
                                           CGRectMake(-20, -20, 600, 600)];
    [[UIColor greenColor] set];
    [path fill];

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [[UIColor blueColor] CGColor]);
    CGContextFillRect(context, CGRectMake(-20, -20, 600, 600));
}
Run Code Online (Sandbox Code Playgroud)

我使用UI和CG分别绘制一个矩形,以防万一有效,另一个无效.并添加了viewDidAppear以下视图:

- (void)viewDidAppear:(BOOL)animated {
    MyView *myView = [[MyView alloc] initWithFrame:CGRectMake(20, 20, 260, 260)];
    [self.view addSubview:myView];
}
Run Code Online (Sandbox Code Playgroud)

但无论如何,彩色盒子都不会超越该(20, 20, 260, 260)区域.只有CALayers可以自由添加并出现在视图范围之外,这是真的吗?是不是因为图形上下文仅限于此(20, 20, 260, 260)开头?如果是这样,有没有办法让drawRect内容出现在视图的界限之外,在所有四个顶部,向下,向左,向右的方向上?

小智 25

您的问题是"drawRect"会自动剪裁到您正在绘制的视图中.

而不是在视图本身中进行绘制,而是将第二个(子)视图添加到第一个视图,即第一个视图的边界之外.这将允许您执行依赖于第一个视图的放置的绘图,但是在第一个视图的边界之外.

希望这可以帮助.


Lef*_*ris -3

在已添加滚动视图的视图上尝试此操作:

self.scrollView.backgroundColor = [UIColor darkGrayColor];
self.scrollView.layer.cornerRadius = 10.0f;
self.scrollView.layer.masksToBounds = YES;
Run Code Online (Sandbox Code Playgroud)

它应该根据需要显示带有圆角的灰色滚动视图。

请记住您需要导入 QuartzCore FrameWork