标签: cashapelayer

如何获取 UIBezierPath 圆弧的半径中心点?

我有 Objective C 应用程序。在 ViewController 中,我有一个 UIView,在这个视图中,我用 UIBezierPath 画了一个圆圈,代码如下:

CAShapeLayer* clockWiseLayer = [[CAShapeLayer alloc] init];
        clockWiseLayer.path = [UIBezierPath bezierPathWithArcCenter:centerPoint
                                                              radius:radius
                                                          startAngle:startAngle
                                                            endAngle:endAngle
                                                           clockwise:YES].CGPath;
Run Code Online (Sandbox Code Playgroud)

然后我想知道部分的点中心或部分圆弧中心的半径中心是什么,如下所示:

在此输入图像描述

我怎样才能得到这一点?如果我知道角度的终点、起点、半径大小,该点的值是多少?如何计算?

objective-c cashapelayer cgpoint ios uibezierpath

0
推荐指数
1
解决办法
2004
查看次数

如何将动画化的 UIBezierPath 或 cgPath 翻转到 CAShapeLayer 上?

我有一个 [UIBezierPath] 类型的数组,我将其转换为 cgPaths,然后将其动画到我称为 shapeLayer 的 CAShapeLayer 上。现在由于某种原因我所有的路径都是颠倒的,所以所有的路径都被颠倒了。我该如何解决这个问题,我尝试了几种方法,但遗憾的是它们都不起作用......但是我确实弄清楚了如何扩展路径。这是我绘制 swiftPath 的代码,它是由函数 swiftBirdForm() 下的 Forms 类中找到的 UIBezierPaths 组成的路径。绘制路径工作正常,我只是不知道如何将其翻转 180 度。

    @objc func drawForm() {
    var swiftPath = Forms.swiftBirdForm()
    let shapeLayer = CAShapeLayer()
    shapeLayer.fillColor = UIColor.clear.cgColor
    shapeLayer.strokeColor = UIColor.black.cgColor
    shapeLayer.lineWidth = 1
    shapeLayer.frame = CGRect(x: -120, y: 120, width: 350, height: 350)

    var paths: [UIBezierPath] = swiftPath

    guard let path = paths.first else {
        return
    }

    paths.dropFirst()
        .forEach {
            path.append($0)
    }

    shapeLayer.transform = CATransform3DMakeScale(0.6, 0.6, 0)
    shapeLayer.path = path.cgPath

    self.view.layer.addSublayer(shapeLayer)

    let strokeEndAnimation = …
Run Code Online (Sandbox Code Playgroud)

cabasicanimation cashapelayer cgpath uibezierpath swift

0
推荐指数
1
解决办法
1440
查看次数

CATextLayer位置和变换问题

我正在尝试构建一个类似附加圆形图像的控件,其中多个段的每个部分的空间相等。段数可以根据提供的数组而改变。

到目前为止,我已经使用 CAShapeLayer 和 UIBezierPath 开发了这个。还在每个形状图层的中心添加了文本。到目前为止,我已经添加了用于生成此控件的代码。

在此输入图像描述

let circleLayer = CALayer()
func createCircle(_ titleArray:[String]) {
     update(bounds: bounds, titleArray: titleArray)
     containerView.layer.addSublayer(circleRenderer.circleLayer)
}


 func update(bounds: CGRect, titleArray: [String]) {
        let position = CGPoint(x: bounds.width / 2.0, y: bounds.height / 2.0)
        circleLayer.position = position
        circleLayer.bounds = bounds
        update(titleArray: titles)
    }

func update(titleArray: [String]) {
   let center = CGPoint(x: circleLayer.bounds.size.width / 2.0, y: circleLayer.bounds.size.height / 2.0)
   let radius:CGFloat = min(circleLayer.bounds.size.width, circleLayer.bounds.size.height) / 2
   let segmentSize = CGFloat((Double.pi*2) / Double(titleArray.count))
   
   for i in 0..<titleArray.count {
       let …
Run Code Online (Sandbox Code Playgroud)

cashapelayer ios catextlayer quartz-core swift

0
推荐指数
1
解决办法
922
查看次数

圆形视图的右上角和左上角?

我正在试图弄清楚如何掩盖UIView以显示一个形状,该形状代表一个坐在其上的半圆形的正方形.

基本上,就像将边界半径仅应用于顶部两个角以将它们圆化并创建弧形.

我正在使用swift,这让我发疯了.

编辑:CornerRadius没有做我想要的.我觉得我必须使用CGShapeLayer,但我不确定如何创建弧.

EDIT2: 在此输入图像描述

EDIT3:

考虑解释我想要什么,提供图片,并解释我不理解我需要做什么,或者我需要做什么对某些人来说是不够的,这是我尝试过的:

尝试设置layer.cornerRadius属性,同时将视图的底部推出屏幕以隐藏底角不会出现切断,这种类型的遮蔽太圆形并且没有提供正确的圆弧效果.

我尝试使用UIBezierPath设置前两个角来使用视图的cornerRadii width / 2.这也没有产生适当的结果.在尝试将值硬编码到cornerRadii中时,我注意到无论值如何,我似乎无法获得我想要的结果.

还有哪些其他选择?或者我只是错误地使用BezierPath?

编辑4:

这是我的原始代码.

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    let bezierPath = UIBezierPath(roundedRect: navBarView.bounds, byRoundingCorners: [.TopLeft, .TopRight], cornerRadii: CGSizeMake(navBarView.bounds.width / 2, navBarView.bounds.width / 2)).CGPath;

    let shapeLayer = CAShapeLayer();
    shapeLayer.bounds = navBarView.bounds
    shapeLayer.path = bezierPath
    navBarView.layer.mask = shapeLayer

    updateUI() // <-- Label text, etc. 
}
Run Code Online (Sandbox Code Playgroud)

此外,如前所述,曾尝试过 navBarView.layer.cornerRadius = x

cashapelayer ios uibezierpath swift

-1
推荐指数
1
解决办法
4324
查看次数

如何在我的iOS应用程序中使用"DEGREE"

嗨,我需要制作2D拱门.我在哪里遇到问题

arc.path=[UIBezierPath bezierPathWithArcCenter:CGPointMake(50, 100)
                                                  radius:80.0
                                                  startAngle:DEGREE(65)
                                                  endAngle:DEGREE(90)
                                                  clockwise:NO].CGPath;
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

Undefined symbols for architecture i386: "_DEGREE", referenced from:

我知道我没有包含一些头文件,我可以知道哪一个要包含?

objective-c cashapelayer uibezierpath

-2
推荐指数
2
解决办法
3492
查看次数