如何将UIView裁剪为半圆?

问题描述 投票:5回答:2

我想以半圆形状裁剪UIView

like this image

提前致谢。

swift uiview uibezierpath
2个回答
5
投票

一个方便的方法只是UIView的子类,在它上面添加一个图层,如果它不是默认的话,使视图颜色透明。

import UIKit

class SemiCirleView: UIView {

    var semiCirleLayer: CAShapeLayer!

    override func layoutSubviews() {
        super.layoutSubviews()

        if semiCirleLayer == nil {
            let arcCenter = CGPoint(x: bounds.size.width / 2, y: bounds.size.height / 2)
            let circleRadius = bounds.size.width / 2
            let circlePath = UIBezierPath(arcCenter: arcCenter, radius: circleRadius, startAngle: CGFloat.pi, endAngle: CGFloat.pi * 2, clockwise: true)

            semiCirleLayer = CAShapeLayer()
            semiCirleLayer.path = circlePath.cgPath
            semiCirleLayer.fillColor = UIColor.red.cgColor
            layer.addSublayer(semiCirleLayer)

            // Make the view color transparent
            backgroundColor = UIColor.clear
        }
    }    
}

5
投票

这个问题已在这里得到解答:Draw a semi-circle button iOS

这是该问题的摘录,但使用的是UIView:

斯威夫特3

let myView = [this should be your view]
let circlePath = UIBezierPath.init(arcCenter: CGPoint(x: myView.bounds.size.width / 2, y: 0), radius: myView.bounds.size.height, startAngle: 0.0, endAngle: CGFloat(M_PI), clockwise: true)
let circleShape = CAShapeLayer()
circleShape.path = circlePath.cgPath
myView.layer.mask = circleShape

斯威夫特4

let myView = [this should be your view]
let circlePath = UIBezierPath.init(arcCenter: CGPoint(x: myView.bounds.size.width / 2, y: 0), radius: myView.bounds.size.height, startAngle: 0.0, endAngle: .pi, clockwise: true)
let circleShape = CAShapeLayer()
circleShape.path = circlePath.cgPath
myView.layer.mask = circleShape

我希望这可以帮助你

© www.soinside.com 2019 - 2024. All rights reserved.