为什么阴影半径也会影响圆圈的内部?

时间:2015-11-12 16:45:32

标签: ios objective-c calayer shadow

我想将阴影应用于圆圈的外太空。但是阴影半径也在内部起作用,因此核心圆看起来比实际上要小

我画这样的圆圈:

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];

结果是正常的圆圈: enter image description here

但如果我将self.shadowLayer.shadowRadius从0更改为30,结果是: enter image description here

你可以看到,核心中纯色的大小会缩小。我希望阴影仅在路径的外部生效,纯色与shadow radius = 0的大小完全相同。之后添加了红色曲线截图。是否只是看到尺寸的差异。

更新 一个想法是将shadowRadius减少一半并将帧扩展相同的量。我认为这样做会很好。

1 个答案:

答案 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);
}

在阴影边框外面提供阴影效果:

enter image description here