如何制作具有圆角顶角和方形底角的 UIView
Posted
技术标签:
【中文标题】如何制作具有圆角顶角和方形底角的 UIView【英文标题】:How can you make a UIView with rounded top corners and square bottom corners 【发布时间】:2011-06-27 22:25:55 【问题描述】:我正在尝试获得具有圆角顶角和方形底角的视图,类似于分组 UITableViewCell 的顶行。
有人知道一种不使用背景图像的简单绘制方法吗?
【问题讨论】:
Just two rounded corners?的可能重复 【参考方案1】:我不久前读过这篇文章:
Just two rounded corners?
还有这篇后续文章:
Round two corners in UIView
我认为这些应该回答你的问题。
【讨论】:
考虑改进您的帖子,因为您的答案本质上是两个链接。请参阅:Are answers that just contain links elsewhere really “good answers”? 和 Why is linking bad?。 @Bavarious:如果不复制答案(主要是代码),我不确定在这种情况下如何做到这一点。即便如此,答案和第二篇文章的 cmets 包含许多相关细节。我会再看一遍,看看是否可以添加更多上下文。我感谢建设性的批评。【参考方案2】:Swift 4:适用于 iOS 11 及更高版本
override func viewDidLoad()
super.viewDidLoad()
if #available(ios 11.0, *)
self.viewToRound.clipsToBounds = true
viewToRound.layer.cornerRadius = 20
viewToRound.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
else
// Fallback on earlier versions
早期 iOS 版本
override func viewDidLayoutSubviews()
self.viewToRound.clipsToBounds = true
let path = UIBezierPath(roundedRect: viewToRound.bounds,
byRoundingCorners: [.topRight, .topLeft],
cornerRadii: CGSize(width: 20, height: 20))
let maskLayer = CAShapeLayer()
maskLayer.path = path.cgPath
viewToRound.layer.mask = maskLayer
【讨论】:
【参考方案3】:iOS 11 引入了一个名为CACornerMask 的新结构。
使用这种结构,您可以对角进行更改:左上、右上、左下、右下。
Swift 示例:
myView.clipsToBounds = true
myView.layer.cornerRadius = 10
myView.layer.maskedCorners = [.layerMinXMinYCorner,.layerMaxXMinYCorner]
Objective-C 示例
self.view.clipsToBounds = YES;
self.view.layer.cornerRadius = 10;
self.view.layer.maskedCorners = kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner;
【讨论】:
【参考方案4】:目标 C
iOS 11 使用视图角半径
if (@available(iOS 11.0, *))
_parentView.clipsToBounds = YES;
_parentView.layer.cornerRadius = 20;
_parentView.layer.maskedCorners = kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner;
else
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:_parentView.bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight) cornerRadii:CGSizeMake(20.0, 20.0)];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = _parentView.bounds;
maskLayer.path = maskPath.CGPath;
_parentView.layer.mask = maskLayer;
【讨论】:
以上是关于如何制作具有圆角顶角和方形底角的 UIView的主要内容,如果未能解决你的问题,请参考以下文章
圆形 UITableViewCell 仅底角或顶角,但它不起作用 Swift iOS 10