【问题标题】:Problems with borderless window content disappearing无边框窗口内容消失的问题
【发布时间】:2013-03-20 14:20:50
【问题描述】:

如果我从我的视图中删除此方法,一切正常(如果我单击按钮,内容不会消失),所以这绝对是原因。

我正在尝试通过下面的代码制作一个圆形并具有渐变的窗口。这有什么问题会导致视图上的内容消失吗?

- (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];

}

【问题讨论】:

    标签: objective-c xcode cocoa nswindow nsbezierpath


    【解决方案1】:

    切换到 NSGradient drawInbezierPath 解决了这个问题。

    【讨论】:

      【解决方案2】:

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

      当您使用setClip 时,您将删除之前的剪辑路径并替换您的新路径。这意味着您最终会在脏区外部进行绘制,从而覆盖之前绘制的内容。

      我在自己的初始屏幕上绘制圆角时遇到了同样的问题,最终找到了一种不同的方法来做我想做的事。

      另外,您可以使用NSBezierPathclipRect: 类方法将剪切路径更改为现有路径与您要限制绘制的区域的交点。当然,在调用clipRect: 时保存和恢复图形状态。

      【讨论】:

        猜你喜欢
        • 2023-03-13
        • 1970-01-01
        • 2015-06-04
        • 1970-01-01
        • 2017-03-25
        • 1970-01-01
        • 1970-01-01
        • 2012-04-24
        • 2012-11-05
        相关资源
        最近更新 更多