2012-09-23 97 views
17

我认为从OS X的某些观点来看,对于iOS而言,这些内容可能会出现在视图边界之外? (对于UIView的)但是,如果我创建了一个全新的单一视图的应用程序,并创建了子类的UIView一个MyView的类,并实现其的drawRect:在iOS上,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)); 
} 

我同时使用的用户界面和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内容出现在视图边界以外的所有四个顶部,下部,左侧,右侧?

+0

我可以问一下,为什么你想在可见矩形的外面画,因为它不可见?如果您计划在稍后显示它,则应正确提及CALayer。 – Lefteris

+0

其中一个原因是,我正在考虑实现具有圆角的PopoutScrollView,甚至是“像云一样的边缘”。我发现我可以继承UIView并拥有一个UIScrollView作为属性,所以scrollview是视图的子视图,而且我实际上必须重写'addSubview'来添加到'self.scrollView'。这是因为我不能简单地在scrollView上绘制边框,否则它们会滚动。这可能会很复杂,我想,为什么不只是UIScrollView的子类,并在drawRect中绘制边界外?那么我不必重写这么多方法。 –

+0

尽管我还没有尝试过这个,但我没有看到这种不工作的原因,通过scrollview.layer.cornerRadius属性添加圆角到scrollview,应该为你做到这一点。 此外,如果你打算修改一个scrollView,你应该继承scrollview和它的drawRect方法,而不是一个UIView – Lefteris

回答

0

试试这一个观点,在这里您已经添加了滚动:

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

它应该显示带圆角的灰色滚动视图,只要你想。

记住,你需要导入QuartzCore FrameWork的

+0

如果需要跳出界限,该怎么办? –

+0

我不明白问题 – Lefteris

+0

我的意思是,上面的代码将在视图的边界内绘制背景。如果我们需要绘制顶部上方10像素,左边界左侧10个像素等等(绘制一些东西,或者绘制背景和圆角) –

20

你的问题是,“drawRect中”自动裁剪到你是在图纸视图。

而不是在视图本身做绘图,向第一个视图添加第二个(子)视图,即在第一个视图的范围之外。这将允许您进行绘制,这取决于第一个视图的位置,但位于第一个视图的边界之外。

希望这会有所帮助。