繁体   English   中英

阴影不会出现在使用CALayer的UIView上

[英]Shadow not appearing for UIView using CALayer

我有一个从笔尖加载的子类UIView ,我无法在它周围画一个阴影。 我试图在整个视图周围出现一个阴影已经有一段时间了。 我选择将它放在它自己的子层中,以便以后简化动画。 这是代码:

-(void)awakeFromNib 
{
    self.clipsToBounds = NO;

    // set up the shadow layer
    CALayer *shadow = [CALayer layer];
    shadow.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.bounds.size.width, self.bounds.size.height);
    shadow.shadowColor = [UIColor blueColor].CGColor;
    shadow.shadowRadius = 15.0;
    shadow.opacity = 1.0;
    [self.layer addSublayer:shadow];
    // I set this property so I have access to it later to more easily animate it.
    self.shadowLayer = shadow;
}

当我NSLog shadowLayer属性时,坐标和框架是正确的。 它与它支持的视图相匹配。

我还在self.layer上设置了边框颜色和角半径,它显示正确。 如果我将阴影放在self.layer它会出现,但它包含了我的父UIView所有子视图。

任何帮助是极大的赞赏。

假设您已导入QuartzCore 我认为你需要为UIView设置和创建一个边框。 使用此方法[self roundedLayerWithShadow:yourView.layer radius:5.0f];

- (void)roundedLayerWithShadow:(CALayer *)viewLayer 
                        radius:(float)r 
{
    [viewLayer setMasksToBounds:YES];
    [viewLayer setCornerRadius:r];        
    [viewLayer setBorderColor:[RGB(180, 180, 180) CGColor]];
    [viewLayer setBorderWidth:1.0f];

    [viewLayer setShadowColor:[RGB(0, 0, 0) CGColor]];
    [viewLayer setShadowOffset:CGSizeMake(0, 0)];
    [viewLayer setShadowOpacity:1];
    [viewLayer setShadowRadius:2.0];
    return;
}

我一直在努力,结果你需要将shadowOpacity设置为1.0。 在您的代码中,您不小心使用了opacity而不是shadowOpacity 那是我遇到的同样问题。

一般来说,为了出现阴影:

  • shadowOpacity应大于0
  • shadowRadius应大于0
  • masksToBounds应该设置为false(以避免剪切阴影)
  • shadowColor应该与视图的superview的背景颜色不同

Swift 4.2。 示例实现:

let myCustomView = MyCustomView()
myCustomView.layer.shadowColor = UIColor.black.cgColor
myCustomView.layer.shadowOpacity = 0.15
myCustomView.layer.shadowRadius = 5
myCustomView.layer.masksToBounds = false
myCustomView.layer.shadowOffset = CGSize(width: 0, height: 2)

除了borderRadius之外,您的shadow层看起来非常透明。 因此它不会丢弃shadow.superlayer上的任何阴影。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM