在Swift中实现协议来改变UIView的属性

时间:2015-05-13 18:42:05

标签: ios swift uiview protocols

我以为我写得正确。我试图在另一个viewcontroller中设置一个值(然后存储在一个单例中)来改变我的BarGraphView中矩形的高度,但是当我传入的值被更改时,我的BarGraphView不会重绘...任何人都可以发现我失踪的东西吗?

BarGraphViewController:

import UIKit

class BarGraphViewController: UIViewController, BarGraphViewDataSource {



    @IBOutlet weak var barGraphView: BarGraphView! {
        didSet {
            barGraphView.datasource = self
        }
    }


    @IBOutlet weak var testLabel: UILabel!


    override func viewDidLoad() {
        super.viewDidLoad()

    }

    var firstBarHeight: Int = 30 {
        didSet {
            firstBarHeight = SharkTankSingleton.instance.firstInvestorTotalasInt / 250
            updateUI()
        }

    }

    private func updateUI() {
        barGraphView.setNeedsDisplay()
    }

    func firstBarHeightForBarGraphView(sender: BarGraphView) -> CGFloat? {
        return CGFloat(firstBarHeight)
    }

BarGraphView:

import UIKit

protocol BarGraphViewDataSource: class {
    func firstBarHeightForBarGraphView(sender: BarGraphView) -> CGFloat?
}

@IBDesignable
class BarGraphView: UIView {

     @IBInspectable var firstBarColor: UIColor = UIColor.blueColor()



    weak var datasource: BarGraphViewDataSource?

    override func drawRect(rect: CGRect) {

        let firstBarHeight = datasource?.firstBarHeightForBarGraphView(self) ?? 0






         let firstBar = CGRect(x: 200, y: 400, width: 30, height: firstBarHeight)
//         firstBarColor.setFill()
        var firstBarPath = UIBezierPath(rect: firstBar)
        UIColor.redColor().setFill()
        firstBarPath.fill()

0 个答案:

没有答案