阴影效果不适用于可调整大小的NSView

时间:2016-08-12 06:06:18

标签: macos cocoa

我在下面为NSView编写了阴影效果代码。

    [_nsview setWantsLayer:YES];
    _nsview.layer.masksToBounds = NO;
    _nsview.layer.cornerRadius = 5;
    _nsview.layer.shadowOffset = CGSizeMake(.3f, -.3f);
    _nsview.layer.shadowRadius = 10;
    _nsview.layer.shadowOpacity = 0.20; 
    _nsview.layer.shadowColor = [NSColor blackColor].CGColor;

_nsview是NSView的出口。上面的代码完美地运行并产生阴影效果......但问题是在调整_nsview阴影后获取隐藏。

This is after running my sample app, shadow effect working perfectly

This is after resizing main window of sample app(_nsview has auto layout constraints, due to that it will also resize with main window)

2 个答案:

答案 0 :(得分:1)

改为使用NSShadow:

    [_childView setWantsLayer:YES];
    _childView.layer.backgroundColor = [NSColor whiteColor].CGColor;
    _childView.layer.cornerRadius = 5;

    NSShadow *dropShadow = [[NSShadow alloc] init];
    [dropShadow setShadowColor:[NSColor colorWithWhite:0.1 alpha:0.6]];
    [dropShadow setShadowOffset:NSMakeSize(0, -5)];
    [dropShadow setShadowBlurRadius:5];
    _childView.shadow = dropShadow;

答案 1 :(得分:0)

除非您使用图层托管视图(注意:与图层支持的视图不同),否则您应该假设NSView可以在幕后随时更改图层属性。阴影和变换是开发人员控制之外最常见的属性。

这是一些有用的阅读:

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreAnimation_guide/SettingUpLayerObjects/SettingUpLayerObjects.html

https://www.objc.io/issues/14-mac/appkit-for-uikit-developers/

相关问题