我想将阴影应用于圆圈的外太空。但是阴影半径也在内部起作用,因此核心圆看起来比实际上要小
我画这样的圆圈:
self.shadowLayer = [CALayer layer];
self.shadowLayer.frame = self.view.layer.bounds;
self.shadowLayer.shadowColor = [UIColor blueColor].CGColor;
self.shadowLayer.shadowRadius = 0;
self.shadowLayer.shadowOpacity = 1.0;
self.shadowLayer.shadowOffset = CGSizeMake(0,0);
CGRect frame = CGRectMake(0 , 50, self.view.bounds.size.width, self.view.bounds.size.width);
self.shadowLayer.shadowPath = [UIBezierPath bezierPathWithOvalInRect:CGRectInset(frame, 40, 40)].CGPath;
[self.view.layer addSublayer:self.shadowLayer];
但如果我将self.shadowLayer.shadowRadius
从0更改为30,结果是:
你可以看到,核心中纯色的大小会缩小。我希望阴影仅在路径的外部生效,纯色与shadow radius = 0
的大小完全相同。之后添加了红色曲线截图。是否只是看到尺寸的差异。
更新
一个想法是将shadowRadius
减少一半并将帧扩展相同的量。我认为这样做会很好。
答案 0 :(得分:0)
您可以使用NSShadow
并绘制自定义UIView
来产生您想要的效果。
使用代码绘制自定义视图:
- (void)drawRect: (CGRect)frame
{
//// General Declarations
CGContextRef context = UIGraphicsGetCurrentContext();
//// Color Declarations
UIColor* color4 = [UIColor colorWithRed: 0.301 green: 0.261 blue: 0.968 alpha: 1];
UIColor* shadowColor = [UIColor colorWithRed: 0 green: 0 blue: 0 alpha: 1];
//// Shadow Declarations
NSShadow* shadow = [[NSShadow alloc] init];
[shadow setShadowColor: shadowColor];
[shadow setShadowOffset: CGSizeMake(0.1, -0.1)];
[shadow setShadowBlurRadius: 11];
//// Oval Drawing
UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(CGRectGetMinX(frame) + 69, CGRectGetMinY(frame) + 14, 72, 70)];
CGContextSaveGState(context);
CGContextSetShadowWithColor(context, shadow.shadowOffset, shadow.shadowBlurRadius, [shadow.shadowColor CGColor]);
[color4 setFill];
[ovalPath fill];
CGContextRestoreGState(context);
}
在阴影边框外面提供阴影效果: