钻石般的 UIView

Posted

技术标签:

【中文标题】钻石般的 UIView【英文标题】:Diamond-like UIView 【发布时间】:2016-04-22 21:00:35 【问题描述】:

我正在尝试创建一个带有菱形角的 UIView,如图所示:

我熟悉圆角:

myView.layer.cornerRadius = 10

但是,我想要一个不同的形状。我怎么能创造这种效果?感谢您的帮助!

【问题讨论】:

覆盖drawRect: 对不起,我以前从未使用过这种方法。你能给我一些示例代码吗?谢谢 请阅读View Programming Guide for ios 这个指南很好,但是太大了。如果你只是想解决这个特殊问题,请使用UIBezierPath 我从来没有真正使用过绘图框等。你能帮我写一些代码吗? 【参考方案1】:

解决此类问题的最佳方法是使用 CAShapeLayer。以下是可行的方法:将其粘贴到操场上,看看它是如何剪掉角落的。

import UIKit
import XCPlayground

extension UIView 
    func maskCorners(inset: CGFloat) 
        let path = UIBezierPath()
        path.moveToPoint(CGPoint(x: bounds.origin.x + inset,y: 0))
        path.addLineToPoint(CGPoint(x: CGRectGetMaxX(bounds) - inset,y: 0))
        path.addLineToPoint(CGPoint(x: CGRectGetMaxX(bounds), y: bounds.origin.y + inset))
        path.addLineToPoint(CGPoint(x: CGRectGetMaxX(bounds), y: CGRectGetMaxY(bounds) - inset))
        path.addLineToPoint(CGPoint(x: CGRectGetMaxX(bounds) - inset,y: CGRectGetMaxY(bounds)))
        path.addLineToPoint(CGPoint(x: bounds.origin.x + inset,y: CGRectGetMaxY(bounds)))
        path.addLineToPoint(CGPoint(x: 0,y: CGRectGetMaxY(bounds) - inset))
        path.addLineToPoint(CGPoint(x: 0,y: bounds.origin.y + inset))
        path.addLineToPoint(CGPoint(x: bounds.origin.x + inset,y: 0))

        let mask = CAShapeLayer()
        mask.frame = bounds
        mask.path = path.CGPath
        layer.mask = mask
    


let diamond = UIView(frame: CGRect(x:0, y: 0, width: 100, height:100))
diamond.backgroundColor = UIColor.redColor()
XCPlaygroundPage.currentPage.liveView = diamond
diamond.maskCorners(25)

【讨论】:

您是否可以向我展示如何使用它创建一个函数,以便我可以将它用于许多视图。我已经尝试过自己,但我无法产生相同的结果。 再次感谢。这正是我想要的!

以上是关于钻石般的 UIView的主要内容,如果未能解决你的问题,请参考以下文章

2022团体程序设计天梯赛

2022团体程序设计天梯赛

2022团体程序设计天梯赛

2022团体程序设计天梯赛

宏碁新款非凡 Pro 笔记本 评测

宏碁新款非凡 Pro 笔记本 评测