钻石般的 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的主要内容,如果未能解决你的问题,请参考以下文章