我的Draw2D类中有以下代码,它附加到viewcontroller中的视图。
在viewcontroller中我有一个var Drawing = Draw2D()
。我有一个连接按钮,执行功能"检查"与self.Drawing.Check()
。问题是我无法在屏幕上显示该行。椭圆工作正常,功能检查表现良好,我可以看到println()
。
有什么问题?
import UIKit
class Draw2D: UIView {
override func drawRect(rect: CGRect) {
let context = UIGraphicsGetCurrentContext()
CGContextSetLineWidth(context, 4.0)
CGContextSetStrokeColorWithColor(context, UIColor.blueColor().CGColor)
let rectangle = CGRectMake(60,170,200,80)
CGContextAddEllipseInRect(context, rectangle)
CGContextStrokePath(context)
}
func Check() {
let context = UIGraphicsGetCurrentContext()
CGContextSetLineWidth(context, 2.0)
CGContextMoveToPoint(context, CGFloat(100), CGFloat(300))
CGContextAddLineToPoint(context, CGFloat(100 + 200), CGFloat(300 + 100))
CGContextStrokePath(context)
}
}
答案 0 :(得分:1)
您对Check()
的调用超出了常规呈现循环 - 我真的不知道UIGraphicsGetCurrentContext()
在这种情况下实际返回了什么。我猜它会返回nil
:
默认情况下,当前图形上下文为零。在调用drawRect:方法之前,视图对象将有效的上下文推送到堆栈,使其成为当前。
无论如何,这不会改变你不能只调用Check()
并期望渲染线的事实。假设该行实际呈现了一秒:在下一次渲染迭代中,您再次只会执行drawRect
内所写的内容,因此不再显示该行。
您需要做的是在drawRect
内创建某种逻辑,以确定是否可以调用Check()
。
执行此操作的可能方法如下:
class Draw2D: UIView {
var callCheck:Bool? // changing it to Bool! or Bool will change the required check a few lines below
override func drawRect(rect: CGRect) {
let context = UIGraphicsGetCurrentContext()
CGContextSetLineWidth(context, 4.0)
CGContextSetStrokeColorWithColor(context, UIColor.blueColor().CGColor)
let rectangle = CGRectMake(60,170,200,80)
CGContextAddEllipseInRect(context, rectangle)
CGContextStrokePath(context)
if callCheck != nil && callCheck! {
Check()
}
}
func Check() {
let context = UIGraphicsGetCurrentContext()
CGContextSetLineWidth(context, 2.0)
CGContextMoveToPoint(context, CGFloat(100), CGFloat(300))
CGContextAddLineToPoint(context, CGFloat(100 + 200), CGFloat(300 + 100))
CGContextStrokePath(context)
}
}
更改IBAction
:
@IBAction func Button1(sender: AnyObject) {
self.Drawing.callCheck = true
self.Drawing.setNeedsDisplay()
}