无法在视图中添加阴影,CALayer

时间:2012-10-22 19:42:11

标签: objective-c ios calayer shadow

我按照

为我的观点添加了一个阴影
- (void)viewDidLoad{
    [super viewDidLoad];

    self.view.layer.shadowColor = [UIColor blackColor].CGColor;
    self.view.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
    self.view.layer.shadowOpacity = 1.0f;
    self.view.layer.shadowRadius = 4.0f;
    self.view.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.view.bounds].CGPath;
}

但是,我正在获得一个没有阴影的视图,如下面的

enter image description here

我是否错过了途中的一些要点。请就此问题向我提出建议

8 个答案:

答案 0 :(得分:2)

您需要将layer.masksToBounds设置为NO并将clipsToBounds设置为YES。

self.view.layer.masksToBounds = NO;
self.view.clipsToBounds = YES;

答案 1 :(得分:1)

你根本没有抵消你的影子。 尝试:

self.view.layer.shadowOffset = CGSizeMake(0.0f, 1.0f);

答案 2 :(得分:1)

对不起,这是我的愚蠢错误。我所拥有的视图结构是

view(UIView) ( in white color )
    |
    |
    aView (UIView) ( in orange color )

我所做的是展示view而不是aView的阴影。刚刚更正了下面的代码

(void)viewDidLoad{
    [super viewDidLoad];

    self.aView.layer.shadowColor = [UIColor blackColor].CGColor;
    self.aView.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
    self.aView.layer.shadowOpacity = 1.0f;
    self.aView.layer.shadowRadius = 4.0f;
    self.aView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.view.bounds].CGPath;
}

答案 3 :(得分:1)

使偏移量为0,将对视图产生零影响。

答案 4 :(得分:0)

你应该使偏移量具有一定的值而不是0。 例如:

self.view.layer.shadowOffset = CGSizeMake(3, -1);

以便在视图中形成阴影。

答案 5 :(得分:0)

你可以试试这个:

-(void)makeShadow
{
      self.layer.shadowOpacity = 0.7f;
      self.layer.shadowOffset = CGSizeMake(5.0f,3.0f);
      self.layer.shadowColor =[[UIColor blackColor] CGColor];
//    UIBezierPath *path = [UIBezierPath bezierPathWithRect:self.bounds];
//    layer.shadowPath = path.CGPath;
//    layer.shadowRadius = 5.0f;
}
-(void)makeCornerRadius:(CGFloat)_cornerRadius
{
   self.cornerRadius = _cornerRadius;
   [self.layer setMasksToBounds:NO];
   [self.layer setCornerRadius:_cornerRadius];
}

答案 6 :(得分:0)

确保self.clipsToBounds = NO;

答案 7 :(得分:0)

您的观点与您提供的代码无关。确保将阴影应用于正确的视图,您没有将视图遮盖到其边界,并且颜色是正确的。下面的代码显示了一个工作示例:

UIView *pointView = [[UIView alloc] initWithFrame:pointLabel.frame];
pointView.backgroundColor = [UIColor whiteColor];
pointView.layer.shadowColor = [UIColor lightGrayColor].CGColor;
pointView.layer.shadowOffset = CGSizeMake(2.0f, 2.0f);
pointView.layer.shadowOpacity = 1.0f;
pointView.layer.shadowRadius = 5.0f;
pointView.layer.shadowPath = [UIBezierPath bezierPathWithRect:pointView.bounds].CGPath;