动画UIView(在UIGraphicsGetCurrentContext上绘图时)

时间:2017-10-23 13:04:52

标签: swift animation uikit

我创建了一个类,它绘制了一个指示百分比值的单条形图,当设置了一个时。如何为条形图设置动画,使其从左到右生长?

我已经拥有的animate-function不能像它想要的那样......

class EasyLineView : UIView {

    var fillRect = CGRect.init(x: 0, y: 0, width: 0, height: 0)

    var percentValue: CGFloat = 0 {
        didSet {
                self.layoutIfNeeded()
        }
    }

    var orientation: BarOrientation = .vertical

    override init(frame: CGRect) {
        super.init(frame: frame)
        backgroundColor = UIColor.black
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func draw(_ rect: CGRect) {

        print("drawing with \(rect.size.width)")

        let r = self.bounds // the view's bounds

        let ctx = UIGraphicsGetCurrentContext() // get the current context

        ctx!.setFillColor(UIColor.yellow.cgColor) // set fill color to the given color if it's provided, else use clearColor

        if (self.orientation == .vertical){
            fillRect = CGRect.init(x: 0, y: 0, width: r.size.width, height: percentValue*r.size.height)

        } else {
            fillRect = CGRect.init(x: 0, y: 0, width: percentValue*r.size.width, height: r.size.height)
        }

        ctx!.fill(fillRect)

    }

// does not work
func animate(){
    UIView.animate(withDuration: 5, delay: 0, animations: {
        self.layoutIfNeeded()
    })
}

}

1 个答案:

答案 0 :(得分:0)

不要那样做。在draw(_:)中绘制一个方框会给你带来糟糕的表现,并且没有动画的灵活性。

如果你想要的是一个可以配置其尺寸的动画框,添加一个子视图并将背景颜色设置为你的绘图颜色。然后,您可以在动画块中使用自动布局或手动框设置,使框的动画效果达到您想要的大小。