解决方案:以下是我最终创建的类的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)
}
答案 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
(条形高度)不等。