我可以将UIGraphics CurrentContext设置为iOS中面向的属性

时间:2014-01-29 10:10:51

标签: ios core-graphics rubymotion

我正在使用Rubymotion而不是Objective-C / Xcode编写我的应用程序。

我发现很多Objective-C的编写方式更像是面向对象的程序代码而且我试图让我的代码比我在大多数例子中看到的更整洁和简单。

在说,有什么理由说我不能将自定义视图的CurrentContext设置为我的类中的方法或属性?那就是:

def drawRect(rect)
  context = UIGraphicsGetCurrentContext()
  redColor = UIColor.colorWithRed(1.0, green: 0.0, blue: 0.0, alpha:1.0)
  CGContextSetFillColorWithColor(context, redColor.CGColor)
  CGContextFillRect(context, self.bounds)

  # more drawing here ... 
end

会变成:

def drawRect(rect)
  setBackgroundRed
  # call more private methods to draw other stuff here
end

private

def context
  @context ||= UIGraphicsGetCurrentContext()
end

def setBackgroundRed
  CGContextSetFillColorWithColor(context, redColor)
  CGContextFillRect(context, bounds)
end

def redColor
  UIColor.colorWithRed(1.0, green: 0.0, blue: 0.0, alpha:1.0).CGColor
end

谢谢!

2 个答案:

答案 0 :(得分:1)

不建议在drawRect的调用中存储上下文指针。每次调用drawRect都应该自己调用UIGraphicsGetCurrentContext()来获取上下文指针。从那里,将它传递到需要去的地方。您可以执行以下操作:

def drawRect(rect)
  context = UIGraphicsGetCurrentContext()
  setBackgroundRed(context)
  # call more private methods to draw other stuff here
end

private

def setBackgroundRed(context)
  CGContextSetFillColorWithColor(context, redColor)
  CGContextFillRect(context, bounds)
end

def redColor
  UIColor.colorWithRed(1.0, green: 0.0, blue: 0.0, alpha:1.0).CGColor
end

答案 1 :(得分:0)

对于像这样的简单场景,您可以使用更高级别的API,这些API在使用中更为OO。要填充矩形,您无需下载CoreGraphics,因为您可以使用UIColorUIBezierPath

UIColor.colorWithRed(1.0, green: 0.0, blue: 0.0, alpha:1.0).setFill

UIBezierPath.bezierPathWithRect(rect).fill