如何将 UIView 裁剪为半圆形?

Posted

技术标签:

【中文标题】如何将 UIView 裁剪为半圆形?【英文标题】:How to crop the UIView as semi circle? 【发布时间】:2017-07-19 14:05:55 【问题描述】:

我想把 UIView 裁剪成半圆形

提前致谢。

【问题讨论】:

向我们展示你到目前为止所做的事情。 UIBezierPath 可能是一个很好的解决方案。 【参考方案1】:

一种方便的方法是子类化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
        
        

【讨论】:

嗨,半圆工作正常,但我的 UIView 在底部,但是当我添加这个类时,它显示在中心,你能帮帮我吗?我想要这个在底部【参考方案2】:

这里已经回答了这个问题:Draw a semi-circle button ios

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

斯威夫特 3

let myView = [this should be your view]
let circlePath = UIBezierPath(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(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

希望对你有帮助

【讨论】:

【参考方案3】:

它适用于这个问题的 swift 4 和 swift 5。

让 yourView = (是你想从顶部裁剪半圆形的视图)

 let circlePath = UIBezierPath(arcCenter: CGPoint(x: yourView.bounds.size.width / 2, y: yourView.bounds.size.height), radius: yourView.bounds.size.height, startAngle: 0.0, endAngle: .pi, clockwise: false)
    let circleShape = CAShapeLayer()
    circleShape.path = circlePath.cgPath
    yourView.layer.mask = circleShape

【讨论】:

以上是关于如何将 UIView 裁剪为半圆形?的主要内容,如果未能解决你的问题,请参考以下文章

如何将圆形裁剪功能添加到此 UIImagePickerController,目前它显示为正方形

如何在 discord.py 中将图像裁剪为带有枕头的圆形?

如何将 MKMapView(或任何 UIView)裁剪为自定义形状?

创建一个拉伸的半圆

为 UIImagePicker 添加圆形裁剪组件?

如何结合这些命令在 ImageMagick 中实现圆形裁剪?