如何将 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 中将图像裁剪为带有枕头的圆形?