Ios UIView带阴影的圆角
我试图显示一个带有圆角和阴影的UIView。但问题是maskToBounds属性只适用于这两种情况 如果maskToBounds为是,则显示圆角,如果为否,则显示阴影。以下是实现,但它只显示没有阴影的圆角:Ios UIView带阴影的圆角,ios,Ios,我试图显示一个带有圆角和阴影的UIView。但问题是maskToBounds属性只适用于这两种情况 如果maskToBounds为是,则显示圆角,如果为否,则显示阴影。以下是实现,但它只显示没有阴影的圆角: [self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"blue_gradient.jpeg"]]]; self.view.layer.masksToBounds = Y
[self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"blue_gradient.jpeg"]]];
self.view.layer.masksToBounds = YES;
self.view.layer.opaque = NO;
self.view.layer.cornerRadius = 15.0f;
self.view.layer.shadowColor = [UIColor blackColor].CGColor;
self.view.layer.shadowRadius = 5.0;
self.view.layer.shadowOffset = CGSizeMake(3.0, 3.0);
self.view.layer.shadowOpacity = 0.9f;
想法
注意:我已经在以下线程中阅读并实现了代码,但它不起作用:
更新1:
UIView *roundCornerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
roundCornerView.layer.masksToBounds = YES;
roundCornerView.layer.opaque = NO;
roundCornerView.layer.cornerRadius = 15.0f;
roundCornerView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"blue_gradient.jpeg"]];
self.view.layer.shadowColor = [UIColor blackColor].CGColor;
self.view.layer.shadowRadius = 2.0;
self.view.backgroundColor = [UIColor clearColor];
self.view.layer.shadowOffset = CGSizeMake(3.0, 3.0);
self.view.layer.shadowOpacity = 0.9f;
//self.view.layer.shadowPath = [UIBezierPath
// bezierPathWithRect:CGRectMake(0, 0, 100, 100)].CGPath;
[self.view addSubview:roundCornerView];
我试图创建两个独立的视图。一个代表半径,一个代表阴影。问题在于,is在半径视图顶部创建阴影,如下面的屏幕截图所示:
H
更新2:
倒过来还是不行。不创建圆角
UIView *roundCornerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
roundCornerView.layer.masksToBounds = YES;
roundCornerView.layer.opaque = NO;
roundCornerView.layer.cornerRadius = 15.0f;
self.view.layer.shadowColor = [UIColor blackColor].CGColor;
self.view.layer.shadowRadius = 2.0;
//self.view.backgroundColor = [UIColor clearColor];
self.view.layer.shadowOffset = CGSizeMake(3.0, 3.0);
self.view.layer.shadowOpacity = 0.9f;
self.view.layer.shadowPath = [UIBezierPath
bezierPathWithRect:CGRectMake(0, 0, 100, 100)].CGPath;
[self.view addSubview:roundCornerView];
解决方案:
UIView *roundCornerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
roundCornerView.layer.masksToBounds = YES;
roundCornerView.layer.opaque = NO;
roundCornerView.layer.cornerRadius = 15.0f;
roundCornerView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"blue_gradient.jpeg"]];
self.view.layer.shadowColor = [UIColor blackColor].CGColor;
self.view.layer.shadowRadius = 2.0;
self.view.backgroundColor = [UIColor clearColor];
self.view.layer.shadowOffset = CGSizeMake(3.0, 3.0);
self.view.layer.shadowOpacity = 0.9f;
//self.view.layer.shadowPath = [UIBezierPath
// bezierPathWithRect:CGRectMake(0, 0, 100, 100)].CGPath;
[self.view addSubview:roundCornerView];
创建两个视图。
有阴影的一个(别忘了设置阴影路径)
在其中,您添加了一个子视图,其中包含
cornerRadius
和maskToBounds
接受的答案不包含任何代码,因此以下是Swift中的一个示例(参见Obj-C中OP解决方案的原始问题)
与公认的答案一样,此解决方案对阴影和角半径使用单独的视图
// add the shadow to the base view
baseView.backgroundColor = UIColor.clear
baseView.layer.shadowColor = UIColor.black.cgColor
baseView.layer.shadowOffset = CGSize(width: 3, height: 3)
baseView.layer.shadowOpacity = 0.7
baseView.layer.shadowRadius = 4.0
// improve performance
baseView.layer.shadowPath = UIBezierPath(roundedRect: baseView.bounds, cornerRadius: 10).cgPath
baseView.layer.shouldRasterize = true
baseView.layer.rasterizationScale = UIScreen.main.scale
// add the border to subview
let borderView = UIView()
borderView.frame = baseView.bounds
borderView.layer.cornerRadius = 10
borderView.layer.borderColor = UIColor.black.cgColor
borderView.layer.borderWidth = 1.0
borderView.layer.masksToBounds = true
baseView.addSubview(borderView)
// add any other subcontent that you want clipped
let otherSubContent = UIImageView()
otherSubContent.image = UIImage(named: "lion")
otherSubContent.frame = borderView.bounds
borderView.addSubview(otherSubContent)
我的完整答案是。您可以通过应用以下命令,在单个视图中执行此操作: 一,。首先添加一个角半径
yourview.layer.cornerRadius = 5.0
二,。调用下面的函数
shadowToView(view : yourview)
func shadowToView(view : UIView){
view.layer.shadowOffset = CGSize(width: 0, height: 3)
view.layer.shadowOpacity = 0.6
view.layer.shadowRadius = 3.0
view.layer.shadowColor = UIColor.darkGray.cgColor
}
不可能重复!已经检查了该问题并尝试了该方法,但它不起作用。这里有一个黑客的想法,您可以尝试使用UIColor clearColorClear颜色将边框宽度设置为20左右,因为它将在uiview下显示地图。iOS 11中不再需要子视图方法,它有一个新的CALayer属性专门用于遮罩角点:你必须反转两个视图,剪辑视图必须是shadowView的子视图。事实上,有角点,但你不能看到主题,原因有二。第一个原因是剪裁视图中没有内容,第二个原因是阴影的路径是矩形而不是圆角矩形!如果在故事板中添加了视图,该如何操作?我是否需要获取3个视图?或者这是不可能的?@MikeAlter,我还没有在故事板中这样做,尽管我认为使用三个视图是可能的。如果属性检查器中没有必要的属性,请查看使用。