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

时间:2012-09-23 08:57:23

标签: ios uiview uikit calayer

我从某种角度考虑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));
}

我使用UI和CG分别绘制一个矩形,以防万一有效,另一个无效。该视图已添加到viewDidAppear

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

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

2 个答案:

答案 0 :(得分:25)

您的问题是“drawRect”会自动剪裁到您正在绘制的视图中。

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

希望这有帮助。

答案 1 :(得分:-2)

在视图上尝试此操作,您已添加了scrollView:

self.scrollView.backgroundColor = [UIColor darkGrayColor];
self.scrollView.layer.cornerRadius = 10.0f;
self.scrollView.layer.masksToBounds = YES;

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

请记住,您需要导入QuartzCore FrameWork