我正在使用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
谢谢!
答案 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,因为您可以使用UIColor
和UIBezierPath
UIColor.colorWithRed(1.0, green: 0.0, blue: 0.0, alpha:1.0).setFill
UIBezierPath.bezierPathWithRect(rect).fill