我怎样画出弯曲的阴影?

NSA*_*ict 5 iphone macos cocoa objective-c drawrect

像这样:

在此输入图像描述

我知道这不会起作用NSShadow,把它拉进去drawRect:会很好用.

Dav*_*ist 5

您可以使用Core Animations图层和shadowPath属性执行此操作和许多其他类型的阴影.您正在描述的阴影可以使用椭圆阴影路径.

在此输入图像描述

产生这个阴影的代码如下.您可以调整椭圆的大小,使其具有更圆的阴影形状.您还可以使用图层上的阴影属性调整位置,不透明度,颜色和模糊半径.

self.wantsLayer = YES;

NSView *viewWithRoundShadow = [[NSView alloc] initWithFrame:NSMakeRect(30, 30, 200, 100)];
[self addSubview:viewWithRoundShadow];

CALayer *backingLayer = viewWithRoundShadow.layer;
backingLayer.backgroundColor = [NSColor orangeColor].CGColor;

// Configure shadow
backingLayer.shadowColor   = [NSColor blackColor].CGColor;
backingLayer.shadowOffset  = CGSizeMake(0, -1.);
backingLayer.shadowRadius  = 5.0;
backingLayer.shadowOpacity = 0.75;

CGRect shadowRect = backingLayer.bounds;
CGFloat shadowRectHeight = 25.;
shadowRect.size.height = shadowRectHeight;
// make narrow
shadowRect = CGRectInset(shadowRect, 5, 0);

backingLayer.shadowPath = CGPathCreateWithEllipseInRect(shadowRect, NULL);
Run Code Online (Sandbox Code Playgroud)

只是为了展示使用相同技术创建的其他阴影的一些示例; 像这样的道路

在此输入图像描述

会产生这样的影子

在此输入图像描述