2016-08-12 56 views
0

我已经为我的NSView编写了阴影效果代码。阴影效果无法使用Resizable 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)

回答

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/

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;