具有不同半径的视图的所有四个角

Posted

技术标签:

【中文标题】具有不同半径的视图的所有四个角【英文标题】:All four corner of a view having different radius 【发布时间】:2018-01-29 21:55:32 【问题描述】:

如何设计一个所有 4 个角都具有不同角半径的 UIView。所以,UIView 的右上角半径为 20,左上角半径为 30,左下角半径为 10,右下角半径为 20

我想向图中显示的 Viw Container 添加不同的cornerRadius。 使用 UIBEZIER 方法会切断分享评论和喜欢的部分。 viw 容器被固定到单元格

【问题讨论】:

这里有一个简单回答的博客链接 - 如果您的目标是 ios 11+:useyourloaf.com/blog/masked-and-animated-corners 【参考方案1】:

您可以使用此 UIView 扩展。它将根据您的半径值创建和应用遮罩层。

extension UIView 
func applyRadiusMaskFor(topLeft: CGFloat = 0, bottomLeft: CGFloat = 0, bottomRight: CGFloat = 0, topRight: CGFloat = 0) 

    let path = UIBezierPath()
    path.move(to: CGPoint(x: bounds.width - topRight, y: 0))
    path.addLine(to: CGPoint(x: topLeft, y: 0))
    path.addQuadCurve(to: CGPoint(x: 0, y: topLeft), controlPoint: .zero)
    path.addLine(to: CGPoint(x: 0, y: bounds.height - bottomLeft))
    path.addQuadCurve(to: CGPoint(x: bottomLeft, y: bounds.height), controlPoint: CGPoint(x: 0, y: bounds.height))
    path.addLine(to: CGPoint(x: bounds.width - bottomRight, y: bounds.height))
    path.addQuadCurve(to: CGPoint(x: bounds.width, y: bounds.height - bottomRight), controlPoint: CGPoint(x: bounds.width, y: bounds.height))
    path.addLine(to: CGPoint(x: bounds.width, y: topRight))
    path.addQuadCurve(to: CGPoint(x: bounds.width - topRight, y: 0), controlPoint: CGPoint(x: bounds.width, y: 0))

    let shape = CAShapeLayer()
    shape.path = path.cgPath
    layer.mask = shape


示例用法:

let view = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
view.backgroundColor = .red
view.applyRadiusMaskFor(topLeft: 80, bottomLeft: 40, bottomRight: 30, topRight: 60)

结果:Radius applied image

【讨论】:

不要忘记在每次视图调整大小时调用这个函数。 我在我的视图中使用了这个,但问题是切断了我的视图的底部,在左上角和右上角都可以正常工作。 @aleksmutlu 您是否在应用蒙版后调整视图大小?就像@Samah 说的那样,您需要为每次尺寸变化重新涂抹面膜。 如果您使用自动布局,请尝试在应用遮罩之前调用 layoutIfNeeded()。 theViewYouApplyMask.layoutIfNeeded() theViewYouApplyMask.applyRadiusMaskFor(... @NikeshHyanju 没有尝试过但失败了!我似乎做错了,我使用了其他不同的方法,但无论我做什么,它总是切断底部

以上是关于具有不同半径的视图的所有四个角的主要内容,如果未能解决你的问题,请参考以下文章

CSS 所有四个角的CSS3边界半径

单视图 iOS 上的多个投影

如何为 CALayer 的角半径设置动画

拐角半径仅在特定拐角处

每个拐角不同的拐角半径,扩展 TableView 单元格视图

带有白色边框的警报控制器