使用其他类中的UIView函数会导致崩溃

时间:2016-08-17 21:51:57

标签: ios swift

我确信这已被问了一百万次。但我的搜索仍然提出了客观的C解决方案。

我从另一个类调用UIViewController类。我想要更新屏幕。从ViewController调用该函数时,它工作正常。但是当它从另一个类调用时,它崩溃了:

tempImageView.image?.drawInRect(CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height))

说未解包的可选项返回nil。 tempImageView是UIViewController中UIImageView的出口。我想我不清楚外部类函数调用是如何工作的。有谁知道这方面的解决方案?

编辑:

class ViewController: UIViewController, NSURLSessionDelegate {
var lastPoint = CGPoint.zero
var red: CGFloat = 0.0
var green: CGFloat = 0.0
var blue: CGFloat = 0.0
var brushWidth: CGFloat = 10.0
var opacity: CGFloat = 1.0
var swiped = false
var xArray = [CGFloat]()
var yArray = [CGFloat]()
var scale: CGFloat = 0.0
@IBOutlet weak var mainImageView: UIImageView!
@IBOutlet weak var tempImageView: UIImageView!
......
func drawLineFrom(fromPoint: CGPoint, toPoint: CGPoint) {

    // 1
    UIGraphicsBeginImageContext(self.view.frame.size)
    let context = UIGraphicsGetCurrentContext()
    tempImageView.image?.drawInRect(CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height))

    // 2
    CGContextMoveToPoint(context, fromPoint.x, fromPoint.y)
    CGContextAddLineToPoint(context, toPoint.x, toPoint.y)

    // 3
    CGContextSetLineCap(context, .Round)
    CGContextSetLineWidth(context, brushWidth)
    CGContextSetRGBStrokeColor(context, red, green, blue, 1.0)
    CGContextSetBlendMode(context, .Normal)

    // 4
    CGContextStrokePath(context)

    // 5
    self.tempImageView.image = UIGraphicsGetImageFromCurrentImageContext()
    self.tempImageView.alpha = opacity
    UIGraphicsEndImageContext()

}

来自其他控制器的电话

func getChatMessage() {
    socket.on("browser") { (dataArray, socketAck) -> Void in
        for _ in dataArray {
       ViewController().drawLineFrom(CGPoint(x: 0,y: 0), toPoint: CGPoint(x: 1,y: 1))
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您正在初始化新的ViewController并尝试立即对其进行操作。由于一些原因显示你可能是一个初学者,这不会起作用。 (欢迎!)您需要查看UIViewControllers的工作方式(特别是生命周期),或者查看对象的工作方式:)