【问题标题】:NSScrollview and transparent, overlay NSScroller subclassesNSScrollview 和透明,覆盖 NSScroller 子类
【发布时间】:2011-03-09 20:32:47
【问题描述】:

我创建了一个漂亮的 NSScroller 子类,但不知道如何让它覆盖在 NSScrollView 之上,而不是将 documentView 推到一边。

在这里,您可以看到我希望将其设置为 100% 宽的 NSCollectionView 的背景,并让滚动条位于顶部。目前,我必须为滚动条设置白色背景,因为使用clearColor 绘制的不是透明的,而是黑色的。

我是不是走错了路?我在这里遗漏了一些明显的东西吗?如何实现位于NSScrollView 内容之上的透明跟踪NSScroller 的行为?

【问题讨论】:

    标签: cocoa transparency drawrect nsscrollview nsscroller


    【解决方案1】:

    我能够通过在子类 OF NSSCROLLVIEW

    中实现 tile 来获得定位
    - (void)tile {
        [super tile];
        [[self contentView] setFrame:[self bounds]];
    }
    

    事实证明,尝试绘制清晰的颜色是一开始的问题。在滚动子类中,我完全省略了与滑块轨道有关的任何绘图通过覆盖 NSSCROLLER 子类的DRAWRECT:,像这样:

    - (void)drawRect:(NSRect)dirtyRect
    {
        [self drawKnob];
    }
    

    【讨论】:

    • 感谢您提及摆脱与轨道有关的绘图!我试图将它设置为清晰的颜色,但它把一切都搞砸了。删除它,一切都很好!谢谢!
    【解决方案2】:

    请注意,要使其正常工作,您必须为滚动视图启用图层支持!

    即调用:

    [scrollViewInstance setWantsLayer:YES];
    

    或在 Interface Builder 中设置。

    如果你不这样做,scrollView 的 contentView 将绘制在滚动条的顶部。另外:您应该知道,您所做的实际上是重叠两个 NSView(NSScrollView 之上的 NSScroller --- 都继承自 NSView。)与 iOS 上的 UIViews 不同,OS X 上的重叠 NSViews 不受任何当前版本的正式支持操作系统(10.6 下)。打开 CALayers 似乎可以让它工作,但它仍然需要牢记。当然,打开图层会严重影响绘图性能。

    有关详细信息,请参阅此 SO 问题:Is there a proper way to handle overlapping NSView siblings?

    【讨论】:

    • 这解决了我自己的透明滚动条遇到的一个奇怪问题:它第一次出现时有时会闪烁白色,然后一两秒后正确绘制。
    【解决方案3】:

    这个颜色是怎么回事:[NSColor colorWithCalibratedRed:0.0 green:0.0 blue:0.0 alpha:0.0] 我认为您必须使用界面生成器修改大小。

    【讨论】:

    • clearColor 是一样的。问题不在于尺寸,而在于 NSScroller 的行为。标准行为是将内容推到一边并绘制条形图,我希望内容不被推到一边,并且条形图在顶部绘制。
    猜你喜欢
    • 1970-01-01
    • 2019-09-09
    • 2016-12-10
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多