1. 程式人生 > >簡單三步實現UIButton水波紋效果——swift

簡單三步實現UIButton水波紋效果——swift

    @objc func timerFunction(timer: Timer) {
        self.setNeedsDisplay()//會呼叫自動呼叫drawRect方法,這樣可以拿到UIGraphicsGetCurrentContext,就可以畫畫了
        let index:Int = timer.userInfo! as! Int
        let buttonCircle: LYButtonCircle = circles[index]!
        //circleRait:半徑縮放係數,circleRait若等於1則圓達到最大半徑,字典中刪除點選事件,結束定時任務
        if buttonCircle.circleRait <= 1 {
            buttonCircle.circleRait += 1.0/CGFloat(self.loopCount)
        } else {
            circles.removeValue(forKey: index)
            timer.invalidate()
        }
    }
    
    override func draw(_ rect: CGRect) {
        let context: CGContext = UIGraphicsGetCurrentContext()!
        let endAngel = CGFloat(Double.pi * 2)
        for buttonCircle: LYButtonCircle in circles.values {
            //畫圓
            context.addArc(center: CGPoint(x: buttonCircle.circleCenterX, y: buttonCircle.circleCenterY), radius: buttonCircle.circleRait*buttonCircle.circleWidth, startAngle:0, endAngle: endAngel, clockwise: false)
            self.hightLightColor.withAlphaComponent(1-buttonCircle.circleRait).setStroke()
            self.hightLightColor.withAlphaComponent(1-buttonCircle.circleRait).setFill()
            context.fillPath()
        }
    }