2013-03-20 78 views
0

如果我从我的视图中删除此方法一切正常(如果我点击一个按钮,没有内容消失),所以这绝对是原因。无边界窗口内容消失的问题

我想通过下面的代码做一个圆形的窗口,并有一个渐变。这有什么错误可能导致视图上的内容消失?

- (void)drawRect:(NSRect)dirtyRect 
{ 
    [NSGraphicsContext saveGraphicsState]; 

    NSBezierPath *outerClip = [NSBezierPath bezierPathWithRoundedRect:[self bounds] 
                   xRadius:3.0 
                   yRadius:3.0]; 
    [outerClip setClip]; 

    NSGradient* aGradient = [[NSGradient alloc] 
          initWithStartingColor:[NSColor colorWithCalibratedWhite:1.0 alpha:1.0] 
          endingColor:[NSColor colorWithCalibratedWhite:0.65 alpha:1.0]]; 

    [aGradient drawInRect:[outerClip bounds] angle:270]; 

    [NSGraphicsContext restoreGraphicsState]; 

}

回答

0

切换到NSGradient drawInbezierPath修复该问题。

0

我知道你回答了你自己的问题,但我想我会分享为什么你的内容正在用上面的代码消失。

当您使用setClip删除以前剪辑路径和跟你的新路径替换它。这意味着您将结束在脏区域的之外绘制,从而覆盖先前绘制的内容。

我在自己的闪屏上画圆角时遇到了同样的问题,最终找到了一种不同的方式来做我想做的事。

此外,您可以使用clipRect:类的NSBezierPath方法将剪切路径更改为现有路径与要限制绘制的区域的交点。当然,保存并恢复您拨打clipRect:的图形状态。