我在自定义的UIView初始化中使用此代码:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
...
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:CGRectMake(frame.origin.x, frame.size.height, frame.size.width, 15)];
self.layer.masksToBounds = NO;
self.layer.shadowColor = [UIColor blackColor].CGColor;
self.layer.shadowOffset = CGSizeMake(0.0f, 4.0f);
self.layer.shadowOpacity = 0.5f;
self.layer.shadowPath = shadowPath.CGPath;
}
return self;
}
尝试制作这样的投影:
1)
但我得到了这个效果:
2)
你可以看到这是我想要实现的颠倒版本。如何制作第一张图像的阴影效果?
答案 0 :(得分:3)
问题出在您的shadowPath
上。
使用CGRectMake(frame.origin.x, frame.size.height, frame.size.width, 15)
创建UIBezierPath
会设置错误的来源。
首先,origin.x
应为0.0f
,否则如果您的UIView
origin.x != 0.0f
,影子将会移动很远。其次,您需要将shadowPath
的底部与UIView
的底部对齐。
这是使用您的影子代码说明这些问题的UIView
的屏幕截图。 (在较低的UIView
中,您无法看到阴影,因为它远离屏幕右侧。)
如果将矩形更改为:
,您将看到自己的意图const CGFloat shadowRectHeight = 15.0f;
CGRect shadowRect = CGRectMake(0.0f, self.bounds.size.height - shadowRectHeight, self.bounds.size.width, shadowRectHeight)];
答案 1 :(得分:0)
这样做并设置UIView alpha
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = rect;
gradient.colors = [NSArray arrayWithObjects:(id)[UIColor blackColor].CGColor,
(id)[UIColor grayColor].CGColor,
(id)[UIColor blackColor].CGColor,nil];
[self.layer insertSublayer:gradient atIndex:0];
您可以添加或删除要显示的UIColor。