【发布时间】:2017-11-18 10:07:01
【问题描述】:
我想制作一个白色视图,里面有一个三角形指针,如下所示:
如上图所示,目标是在whiteview 中创建一个“圆形凹槽”嵌入
let pointerRadius:CGFloat = 4
pointerLayer = CAShapeLayer()
pointerLayer.path = pointerPathForContentSize(contentSize: bounds.size).cgPath
pointerLayer.lineJoin = kCALineJoinRound
pointerLayer.lineWidth = 2*pointerRadius
pointerLayer.fillColor = UIColor.white.cgColor
pointerLayer.strokeColor = UIColor.black.cgColor
pointerLayer.backgroundColor = UIColor.white.cgColor
layer.addSublayer(pointerLayer)
但我得到的是:
但是,如果我将描边颜色设置为白色
pointerLayer.strokeColor = UIColor.white.cgColor
在凹槽中,我想在底部有一个rounded edge(就像在第一张图片中一样),当 fillColor 和 strokeColor 匹配(都是白色)时,它不再可见。
我该如何解决?
有没有其他方法可以做到这一点?
这里是指针路径的代码:
private func pointerPathForContentSize(contentSize: CGSize) -> UIBezierPath
{
let rect = CGRect(x: 0, y: 0, width: contentSize.width, height: contentSize.height)
let width:CGFloat = 20
let height:CGFloat = 20
let path = UIBezierPath()
let startX:CGFloat = 50
let startY:CGFloat = rect.minY
path.move(to: CGPoint(x: startX , y: startY))
path.addLine(to: CGPoint(x: (startX + width*0.5), y: startY + height))
path.addLine(to: CGPoint(x: (startX + width), y: startY))
path.addLine(to: CGPoint(x: rect.maxX, y: rect.minY))
path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY))
path.addLine(to: CGPoint(x: rect.minX, y: rect.maxY))
path.addLine(to: CGPoint(x: rect.minX, y: rect.minY))
path.close()
return path
}
【问题讨论】:
-
图层描边是内部视图,而不是它们之外;这就是为什么当线条为白色时您看不到凹槽。
-
那我该如何解决呢?
-
不清楚你在问什么。有什么问题?你得到的结果有什么问题?你想达到什么目的?
-
凹槽底部有一个圆形边缘,当填充颜色和描边颜色匹配时,它不再可见。
-
最后我得到了一个尖凹槽
标签: ios swift cashapelayer