编辑:
我终于找到了一个真正简单的解决方案,使用CAGradientLayer类和CALayer绘图功能.
Ole Begemann为名为OBGradientView的 CAGradientLayer类发布了一个很棒的UIView包装器.
该类允许您在应用程序中轻松创建渐变UIView.
然后使用CALayer绘图功能添加圆角和投影值:
// Create the gradient view
OBGradientView *gradient = [[OBGradientView alloc] initWithFrame:someRect];
NSArray *colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor yellowColor], nil];
gradient.colors = colors;
// Set rounded corners and drop shadow
gradient.layer.cornerRadius = 5.0;
gradient.layer.shadowColor = [UIColor grayColor].CGColor;
gradient.layer.shadowOpacity = 1.0;
gradient.layer.shadowOffset = CGSizeMake(2.0, 2.0);
gradient.layer.shadowRadius = 3.0;
[self.view addSubview:gradient];
[gradient release];
Run Code Online (Sandbox Code Playgroud)
别忘了将QuartzCore框架添加到您的项目中.
原始问题:
我一直在研究一个自定义控件,它是一个圆角矩形按钮,填充线性渐变,并有一个投影.我使用这个答案填写了前两个步骤:链接文本
我现在的问题是在生成的形状下添加一个阴影.实际上,上下文被剪切到圆角矩形路径,所以当我使用CGContextSetShadow函数时,它不会绘制它.
我尝试通过绘制圆角矩形两次来解决这个问题,首先使用普通颜色,因此它绘制阴影,然后使用渐变填充重绘它.
它有点工作,但我仍然可以看到在第一次使用纯色绘制时形状角落处的几个像素,正如您在此缩放版本中看到的那样:
http://img269.imageshack.us/img269/6489/capturedcran20100701192.png
它几乎是好的,但还不完美......
这是我的-drawRect:实现:
static void addRoundedRectToPath(CGContextRef context, CGRect rect, float …Run Code Online (Sandbox Code Playgroud)