Swift - 按下时为按钮创建径向线

Posted

技术标签:

【中文标题】Swift - 按下时为按钮创建径向线【英文标题】:Swift - Create radial line for button when pressed 【发布时间】:2018-12-19 22:33:39 【问题描述】:

当按下按钮时,我被要求以编程方式创建径向线效果,如下图所示的按钮 7,但不确定从哪里开始重新创建。

我猜这是使用 CALayer 完成的,对吗?我不是要代码,但如果有人能把我推向正确的方向,那就太棒了。

谢谢!

【问题讨论】:

使用背景图片? 这个人说它是通过编程方式完成的,但使用背景图像会更容易 好吧,放射线“看起来”几乎像不同颜色的馅饼片,可能使用CAReplicatorLayer 感谢疯狂程序员!我在上面找到了一个视频,看起来它可能有用。 我会让我的应用根据需要在代码中绘制径向线图像。不难。 【参考方案1】:

当您有一个简单的几何图案要绘制时,为什么不直接在代码中绘制它呢?这是我对您的径向图像的渲染:

这是生成它的测试应用的完整代码:

class ViewController: UIViewController 
    override func viewDidLoad() 
        super.viewDidLoad()
        let c1 = UIColor(red: 140/255.0, green: 240/255.0, blue: 209/255.0, alpha: 1)
        let c2 = UIColor(red: 59/255.0, green: 150/255.0, blue: 123/255.0, alpha: 1)
        let iv = UIImageView(image:self.radialLinesImage(
            size:CGSize(width:200, height:200), div:20,
            c1:c1, c2:c2))
        iv.frame.origin = CGPoint(x:100, y:100)
        self.view.addSubview(iv)
    
    func radialLinesImage(size:CGSize, div:CGFloat, c1:UIColor, c2:UIColor) -> UIImage 
        let r = UIGraphicsImageRenderer(size: size)
        return r.image  ctx in
            c1.setFill()
            ctx.fill(CGRect(origin:.zero, size:size))
            c2.setFill()
            let p = UIBezierPath()
            let c = CGPoint(x:size.width/2, y:size.height/2)
            for i in 0..<Int(div) 
                let a = CGFloat.pi/(div/2) * CGFloat(i)
                p.addArc(withCenter: c,
                         radius: size.width+size.height,
                         startAngle: a, endAngle: a+CGFloat.pi/div,
                         clockwise: true)
                p.addLine(to: c)
                p.fill()
            
        
    

【讨论】:

在 UIButton Matt 上效果很好。再次感谢!

以上是关于Swift - 按下时为按钮创建径向线的主要内容,如果未能解决你的问题,请参考以下文章

如何在按钮按下时转到 tableView 的顶部

按下时向 SKSpriteNode 添加视觉效果

如何使 segue 等待功能在按钮按下时完成?

按下时将动态创建的按钮信息传递给函数。 kivymd, kivy, 蟒蛇

按下时按钮前景色更改

突出显示被按下的按钮并取消突出显示未按下的按钮 SWIFT