1

在此处输入图像描述

我正在寻找一种方法来编写类似上图的效果(来自 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;
4

2 回答 2

3

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

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

于 2013-03-03T23:50:43.950 回答
0

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

- (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];
}
于 2013-05-20T04:02:32.873 回答