将数据从我的viewcontroller类传递到放置在同一场景中的自定义类UIView时,“在包装可选值时出现意外的nil”

时间:2016-10-04 14:35:36

标签: ios iphone swift uiview uiviewcontroller

我创建了一个自定义类UIView,以便我可以从viewController类中获取一部分图像。我创建了UIView,我想在viewController类中放大并命名为@IBOutlet属性xRaySuperView:UIView!我使用故事板嵌入了Magnifier:UIView自定义类视图。

然后我在自定义放大镜类中实例化了一个viewController对象。但是,当我尝试转换xRaySuperView的图层并在上下文中呈现它时,构建失败并在展开可选值时声明'意外为零'。

看来我的xRaySuperView没有将图层值传递给Magnifier类。 (信息技术是

这是在构建期间创建错误的最后一行。

import UIKit
import QuartzCore

class MagnifierView: UIView {


    var viewController: ViewController!


    //  First Step:  Initialize the UIView
    required init?(coder aDecoder: NSCoder) {

        //  Create instance of ViewController Class
        let viewController = ViewController()
        super.init(coder: aDecoder)


        //  Makes the circle-shape outline.
        self.layer.borderColor = UIColor.blue.cgColor
        self.layer.borderWidth = 4
        self.layer.cornerRadius = 65 //1/2 the width of the frame
        self.layer.masksToBounds = true

    }

    //  Perform transforms on the xray view
    override func draw(_ rect: CGRect) {
        let xrayContext = UIGraphicsGetCurrentContext()
        xrayContext?.translateBy(x: self.frame.size.width / 2, y: self.frame.size.height / 2)
        xrayContext?.scaleBy(x: 1.5, y: 1.5)
        self.viewController.xRaySuperView.layer.render(in: xrayContext!)
    }
}

1 个答案:

答案 0 :(得分:3)

当您使用ViewController()时,您只是创建一个对象,而不是填写其出口(除非init中有ViewController代码才能这样做)。您需要从storyboard或.xib文件中实例化ViewController,或者 - 更有可能 - 将现有实例传递给此类。