Swift - 来自obj-c的端口条形图代码

时间:2014-07-24 06:40:58

标签: objective-c swift

解决方案:以下是我最终创建的类的GitHub链接/将在https://github.com/ckalas/SimpleSwiftBarGraph上展开

我正在尝试(在游乐场中)使用Core Graphics绘制条形图。我将它基于Obj-C中的代码:

- (void)drawRect:(CGRect)rect {
    CGFloat height = self.bounds.size.height;
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextClearRect(context, rect);
    CGContextSetFillColorWithColor(context, [UIColor grayColor].CGColor);
    CGFloat barWidth = 30;
    int count = 0;
    for (NSNumber *num in values) {
        CGFloat x = count * (barWidth + 10);
        CGRect barRect = CGRectMake(x, height - ([num floatValue] * height), barWidth, [num floatValue] * height);
        CGContextAddRect(context, barRect);
        count++;
    }
    CGContextFillPath(context);
}

我正在尝试转换它,但在第二行,Xcode不知道UIGraphicsGetCurrentContext()。有人可以提供帮助吗?

编辑:这是我当前的代码......问题现在是在我评论的for循环中,无论我尝试什么组合,我都无法使该行工作。只是错误无法将类型转换为类型,我已经尝试将数组声明为[NSNumber],没有运气。

 class CustomView: UIView {
        init(frame: CGRect) {
            super.init(frame: frame)
        }
    override func drawRect(rect: GCRect) {
        let values: [UInt8] = [1,2,3]
        let height = self.bounds.size.height
        let context = UIGraphicsGetCurrentContext()
        CGContextClearRect(context, self.frame)
        CGContextSetFillColorWithColor(context, UIColor.grayColor().CGColor!);
        let barWidth = 30.0 as CGFloat
        var count = 0 as CGFloat
        for number in values {
            let x = count * (barWidth + 10) as CGFloat
            let barRect = CGRectMake(x, (height - number*height), barWidth, number*height) // issues here can't convert one type to another
        CGContextAddRect(context, barRect)
        count++
    }
    CGContextFillPath(context)

}

1 个答案:

答案 0 :(得分:2)

声明您的values数组属于[CGFloat]类型。我做了一些其他的风格修改(删除了分号,CGColor已经隐式解包,因此不需要!,并且更喜欢使用类型声明进行转换。

class CustomView: UIView {
    init(frame: CGRect) {
        super.init(frame: frame)
    }
    override func drawRect(rect: CGRect) {
        let values: [CGFloat] = [0.3, 0.6, 0.9]
        let height = self.bounds.size.height
        let context = UIGraphicsGetCurrentContext()
        CGContextClearRect(context, self.frame)
        CGContextSetFillColorWithColor(context, UIColor.grayColor().CGColor)
        let barWidth:CGFloat = 30.0
        var count:CGFloat = 0
        for number in values {
            let x = count * (barWidth + 10)
            let barRect = CGRectMake(x, (height - number*height), barWidth, number*height)
            CGContextAddRect(context, barRect)
            count++
        }
        CGContextFillPath(context)
    }
}

values数组中的值应该从0.0(无条形高度)到1.0(条形高度)不等。