Hob*_*ist -1 cashapelayer ios uibezierpath swift
我正在试图弄清楚如何掩盖UIView以显示一个形状,该形状代表一个坐在其上的半圆形的正方形.
基本上,就像将边界半径仅应用于顶部两个角以将它们圆化并创建弧形.
我正在使用swift,这让我发疯了.
编辑:CornerRadius没有做我想要的.我觉得我必须使用CGShapeLayer,但我不确定如何创建弧.
EDIT3:
考虑解释我想要什么,提供图片,并解释我不理解我需要做什么,或者我需要做什么对某些人来说是不够的,这是我尝试过的:
尝试设置layer.cornerRadius
属性,同时将视图的底部推出屏幕以隐藏底角不会出现切断,这种类型的遮蔽太圆形并且没有提供正确的圆弧效果.
我尝试使用UIBezierPath
设置前两个角来使用视图的cornerRadii width / 2
.这也没有产生适当的结果.在尝试将值硬编码到cornerRadii中时,我注意到无论值如何,我似乎无法获得我想要的结果.
还有哪些其他选择?或者我只是错误地使用BezierPath?
编辑4:
这是我的原始代码.
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
let bezierPath = UIBezierPath(roundedRect: navBarView.bounds, byRoundingCorners: [.TopLeft, .TopRight], cornerRadii: CGSizeMake(navBarView.bounds.width / 2, navBarView.bounds.width / 2)).CGPath;
let shapeLayer = CAShapeLayer();
shapeLayer.bounds = navBarView.bounds
shapeLayer.path = bezierPath
navBarView.layer.mask = shapeLayer
updateUI() // <-- Label text, etc.
}
Run Code Online (Sandbox Code Playgroud)
此外,如前所述,曾尝试过 navBarView.layer.cornerRadius = x
试试这个:
let path = UIBezierPath(roundedRect:self.view.bounds, byRoundingCorners:[.TopLeft, .TopRight], cornerRadii: CGSizeMake(20, 20))
let maskLayer = CAShapeLayer()
maskLayer.frame = self.view.bounds;
maskLayer.path = path.CGPath
self.view.layer.mask = maskLayer;
Run Code Online (Sandbox Code Playgroud)
本UIBezierPath
类可以定义一个由直线和曲线线段的路径,并呈现在您的自定义视图该路径.
例:
let DynamicView=UIView(frame: CGRectMake(50, 200, 200, 300))
DynamicView.backgroundColor=UIColor.redColor()
let path = UIBezierPath(roundedRect:DynamicView.bounds, byRoundingCorners:[.TopLeft, .TopRight], cornerRadii: CGSizeMake(20, 20))
let maskLayer = CAShapeLayer()
maskLayer.frame = DynamicView.bounds;
maskLayer.path = path.CGPath
DynamicView.layer.mask = maskLayer;
self.view.addSubview(DynamicView)
Run Code Online (Sandbox Code Playgroud)
结果:
归档时间: |
|
查看次数: |
4324 次 |
最近记录: |