在iOS上,drawRect不能在视图的边界外绘制?

我从某些方面考虑到了OS X,对于iOS来说,这些内容总是可以在视图的边界之外出现? (对于UIView)但是,如果我创建一个全新的单一视图应用程序,并创建了一个MyView类来分类UIView,并实现其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,600));
}

我使用UI和CG来绘制一个矩形,以防一个工作,另一个不工作.视图被添加到viewDidAppear中:

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

但无论如何,彩盒不会超出(20,260)区域.这是真的吗,只有CALayers可以自由添加和出现在视图的边界之外?可以是因为图形上下文限制了(20,260)开始吗?如果是这样,有没有办法使drawRect内容出现在视图的边界之外,在所有四个上下左右方向?

解决方法

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

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

希望这可以帮助.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...