光滑的圆形UIView角,仅底部

时间:2017-07-11 15:37:36

标签: ios swift uiview calayer uibezierpath

这是我试图模仿我必须使用的Mock-Ups的观点:

InVision Mock Up

使用以下代码;

self.plusButton.layer.masksToBounds = true
let maskPathPlus = UIBezierPath(roundedRect: self.plusButton.bounds, byRoundingCorners: [.topRight, .topLeft], cornerRadii: CGSize(width: 4, height: 4))
let maskLayerPlus = CAShapeLayer()
maskLayerPlus.frame = self.plusButton.bounds
maskLayerPlus.path = maskPathPlus.cgPath
plusButton.layer.mask = maskLayerPlus

self.minusButton.layer.masksToBounds = true
self.minusButton.layer.borderColor = UIColor.init(colorLiteralRed: 0.2265625, green: 0.82421875, blue: 0.34765625, alpha: 1.0).cgColor
self.minusButton.layer.borderWidth = 1.0
let maskPathMinus = UIBezierPath(roundedRect: self.minusButton.bounds, byRoundingCorners: [.bottomLeft, .bottomRight], cornerRadii: CGSize(width: 4, height: 4))
let maskLayerMinus = CAShapeLayer()
maskLayerMinus.frame = self.minusButton.bounds
maskLayerMinus.path = maskPathMinus.cgPath
minusButton.layer.mask = maskLayerMinus

我能够做到这一点:

iOS Simulator Screengrab

我可以做些什么来平滑这些边缘,因为它们似乎只是围绕视图的外边缘并剪裁边框。我不能做一个简单的.cornerRadius,因为( - )的顶部和(+)的底部需要平方。

2 个答案:

答案 0 :(得分:3)

您应该将+和 - 按钮放在另一个视图中,并将边框放在包含视图上。然后你可以使用cornerRadius属性,这对+的底部和 - 的顶部没有影响。

@IBOutlet weak var upDownButton: UIView! // Contains the plus and minus buttons, constraints in storyboard

self.upDownButton.layer.borderWidth = 1.0
self.upDownButton.layer.borderColor = UIColor.init(colorLiteralRed: 0.2265625, green: 0.82421875, blue: 0.34765625, alpha: 1.0).cgColor
self.upDownButton.layer.masksToBounds = true
self.upDownButton.layer.cornerRadius = 4.0

我使用约束来布置容器内的+/-按钮,使用“等高”约束,乘数为0.5。

最终结果如下:

enter image description here

答案 1 :(得分:1)

iOS 11让这更容易

在iOS 11中,我们有一个名为CACornermask

的选项
if ($start = strtotime($_POST['date']) && $start <= time()) {
    $error = 'You must choose a date in the future.';
}

现在我们可以指定需要掩盖的角落。