带阴影的视图

时间:2013-03-03 21:50:28

标签: ios objective-c uiview core-graphics

enter image description here

我正在寻找一种方法来为视图编写类似上图(来自Groupon应用程序)的效果。使用下面的代码,我试图让阴影进展,但它不起作用。我正在寻找的效果是从上到下变暗的视图。任何人都可以告诉我我做错了什么,以及如何更接近Groupon得到的效果?

   view.layer.shadowColor           =   [[UIColor blackColor] CGColor];
   view.layer.shadowRadius          =   8.0f;
   view.layer.shadowOpacity         =   0.75f;
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:view.bounds cornerRadius:4.0];
   view.layer.shadowPath            =   path.CGPath;

2 个答案:

答案 0 :(得分:3)

您正在寻找的效果称为渐变。 (在iOS术语中,阴影是某些对象的复制品,模糊,着色和偏移。)

您可以使用CAGradientLayer来获得您正在寻找的那种效果;尝试添加其中一个作为视图的子图层。

答案 1 :(得分:0)

重申Jesse Rusak上面的解决方案,在你的UIView的Drawrect中你创建一个从clear到black的渐变并将它添加到你视图的子层中:

- (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    UIColor * darkerColor = [UIColorcolorWithWhite:0.0alpha:0.5];
    CGContextSetFillColorWithColor(context, darkerColor.CGColor);
    CGContextFillRect(context, self.bounds);
    NSArray *colors = [NSArrayarrayWithObjects:
                   ((id)[self.backgroundColorcolorWithAlphaComponent:0.0f].CGColor),
                   ((id) [UIColorcolorWithWhite:0.0alpha:1.0].CGColor), nil];
    gradientLayer = [[CAGradientLayeralloc] init];
    gradientLayer.startPoint = CGPointMake(0.5, 0);
    gradientLayer.endPoint = CGPointMake(0.5,1);
    gradientLayer.frame = self.frame;
    gradientLayer.colors = colors;
    [self.layerinsertSublayer:gradientLayeratIndex:0];
}