Swift - Создать радиальную линию для кнопки при нажатии - PullRequest
0 голосов
/ 20 декабря 2018

Меня попросили создать эффект радиальной линии программно, когда кнопка нажата, как показано ниже на кнопке 7, но я не был уверен точно, где начать воссоздание этого.

enter image description here

Я предполагаю, что это сделано с использованием правильного CALayer?Я не прошу код, но если бы кто-то мог подтолкнуть меня в правильном направлении, это было бы здорово.

Спасибо!

1 Ответ

0 голосов
/ 20 декабря 2018

Если у вас есть простой геометрический рисунок для рисования, почему бы просто не нарисовать его в коде?Вот мой рендеринг вашего радиального изображения:

enter image description here

Это полный код тестового приложения, которое его сгенерировало:

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()
            }
        }
    }
}
...