23

我从某些时候开始认为对于 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内容出现在视图边界之外,在所有四个上、下、左、右方向上?

4

2 回答 2

30

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

与其在视图本身中进行绘图,不如向第一个视图添加第二个(子)视图,即在第一个视图的边界之外。这将允许您根据第一个视图的位置进行绘制,但在第一个视图的范围之外。

希望这可以帮助。

于 2012-09-23T11:18:49.907 回答
-3

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

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

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

记住你需要导入 QuartzCore FrameWork

于 2012-09-23T09:38:44.613 回答