将 CAShapeLayer 添加到 UIButton 不起作用

Posted

技术标签:

【中文标题】将 CAShapeLayer 添加到 UIButton 不起作用【英文标题】:Adding CAShapeLayer to UIButton Not Working 【发布时间】:2016-11-14 17:14:45 【问题描述】:

我正在开发一个 Swift 项目并在 UIButton 周围创建一个圆圈,使用 CAShapeLayer 并创建一个圆形 UIBezeir 路径。问题是,如果我将此 CAShapLayer 作为子层添加到 UIbutton,它不起作用。但是在 UiView 上添加这个子层会创建圆圈。

下面是我的代码。

let ovalPath = UIBezierPath(arcCenter: lockButton.center, radius:
        CGFloat(lockButton.frame.size.width/2), startAngle: CGFloat(startAngle), endAngle: CGFloat(sentAngel), clockwise: true)
    UIColor.grayColor().setFill()
    ovalPath.fill()

    let circleLayer = CAShapeLayer()
    circleLayer.path = ovalPath.CGPath

    view.layer.addSublayer(circleLayer)
    circleLayer.strokeColor = UIColor.blueColor().CGColor
    circleLayer.fillColor = UIColor.clearColor().CGColor
    circleLayer.lineWidth = 10.0





    let animation = CABasicAnimation(keyPath: "strokeEnd")

    // Set the animation duration appropriately
    animation.duration = 0.5

    // Animate from 0 (no circle) to 1 (full circle)
    animation.fromValue = 0
    animation.toValue = 1


    // Do a linear animation (i.e. the speed of the animation stays the same)
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)

    // Set the circleLayer's strokeEnd property to 1.0 now so that it's the
    // right value when the animation ends.
    circleLayer.strokeEnd = 3.0

    // Do the actual animation
    circleLayer.addAnimation(animation, forKey: "animateCircle")

如果我们可以将 CAShapeLayer 添加到 UIButton,谁能建议我? 谢谢

【问题讨论】:

您应该能够将 CAShapeLayer 添加到 any CALayer 的子层。让它表现得完全是另一个问题。你想做什么? “圆形按钮”不需要任何新图层。掩蔽到界限也是我没有看到的。所以请提供更多关于什么是有效的和无效的细节,也许我可以提供帮助。 我正在尝试在按钮周围添加循环进度 有什么具体原因吗? @SundeepSaluja “它不起作用”对您意味着什么? 我的意思是,它没有在确切的位置添加圆圈。它使圆圈远离按钮。对不起,我应该在我的问题中提到这一点。 【参考方案1】:

您的代码的一个非常明显的问题是您的circleLayer 没有框架。任何东西都会出现,这真是太神奇了。您需要设置circleLayer 的框架,使其具有大小,并使其相对于其超层正确定位。

【讨论】:

它还可以帮助您查看将圆形图层放入按钮并正常工作的代码:github.com/mattneub/Programming-ios-Book-Examples/blob/master/… 我需要提供框架吗,我问这个是因为,我已经为 UIBezeirPath 提供了中心和半径。 这不是关于路径,而是关于层以及它在其超层中的位置。 嘿,马特,将圆心设置为 CGPoint(0,0) 并设置圆形图层的位置解决了这个问题。谢谢!【参考方案2】:

要解决此问题,您需要删除 UIButton 背景颜色并将其设置为默认值。

【讨论】:

以上是关于将 CAShapeLayer 添加到 UIButton 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

将 CAShapeLayer 添加到 UIButton 不起作用

将CAShapeLayer添加到UIButton但它出现在边框线下

添加到自定义 UICollectionViewCell 时出现意外的 CAShapeLayer 行为

添加新项目时为 CAShapelayer 内容设置动画

CAShapeLayer 动画路径毛刺/闪烁(从椭圆到矩形并返回)

用 CAShapeLayer 添加阴影?