如何在NSScrollView中隐藏documentView?

时间:2012-03-08 16:44:53

标签: cocoa

如何在documentView中隐藏NSScrollView

效果看起来像iBook Author:

Screenshot

3 个答案:

答案 0 :(得分:0)

您需要在文档视图中插入内容以允许显示阴影的空间,然后将视图分层并在其上设置阴影。例如:

view.wantsLayer = YES;
NSShadow *shadow = [NSShadow new];
shadow.shadowColor = [NSColor blackColor]
shadow.shadowBlurRadius = 4.f;
shadow.shadowOffset = NSMakeSize(0.f, -5.f);
view.shadow = shadow;

答案 1 :(得分:0)

NSScrollView contentView是一个NSView子类,它有一个阴影字段,如果你创建一个阴影对象并将其指定给这个字段,那么视图会在绘制时自动显示一个阴影

    NSShadow* shadow = [[NSShadow alloc] init];
    shadow.shadowBlurRadius = 2; //set how many pixels the shadow has
    shadow.shadowOffset = NSMakeSize(2, -2); //the distance from the view the shadow is dropped
    shadow.shadowColor = [NSColor blackColor];
    self.scrollView.contentView.shadow = shadow;

这是有效的,因为在drawRect上绘制的所有视图都使用[shadow set]来使用此shadow属性。

在绘制操作期间执行[阴影设置]会使之后绘制的内容在

下复制

答案 2 :(得分:0)

我刚接触堆栈溢出的帖子,但是我遇到了同样的问题并且已经解决了,所以我想在网上搜索几个小时后找到解决方案就可以回答了。

我的解决方案是使用以下用于drawRect ...

的代码为NSClipView创建一个子类
- (void)drawRect:(NSRect)dirtyRect
{
    [super drawRect:dirtyRect];

    NSRect childRect = [[self documentView] frame];

    [NSGraphicsContext saveGraphicsState];

    // Create the shadow below and to the right of the shape.
    NSShadow* theShadow = [[NSShadow alloc] init];
    [theShadow setShadowOffset:NSMakeSize(4.0, -4.0)];
    [theShadow setShadowBlurRadius:3.0];

    // Use a partially transparent color for shapes that overlap.
    [theShadow setShadowColor:[[NSColor grayColor]
                           colorWithAlphaComponent:0.95f]];

    [theShadow set];

    [[self backgroundColor] setFill];

    NSRectFill(childRect);

    // Draw your custom content here. Anything you draw
    // automatically has the shadow effect applied to it.

    [NSGraphicsContext restoreGraphicsState];
}

然后,您需要创建子类的实例并使用setContentView选择器设置它。

每次内容视图大小更改时,您还需要重新绘制剪辑视图。如果您的内容视图设置为在用户需要时根据画布大小进行更改,除非您重新绘制剪辑视图,否则会留下一些令人讨厌的阴影标记。

你不需要像其他人所建议的那样搞乱剪辑。

希望它有所帮助!