如何为CALayer设置委托?

时间:2017-01-24 12:47:48

标签: ios swift delegates swift3 calayer

我正在尝试设置CALayer的委托,以便我可以使用draw(_:in:)documentation描述了如何执行此操作。但是一旦我设置了委托,就会出现运行时错误:

  

主题1:EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)

这是生成错误的代码。在Xcode 8.2.1中的单视图应用程序模板中替换ViewController.swift

import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let myLayer = CALayer()
        myLayer.delegate = LayerDelegate()
        view.layer.addSublayer(myLayer)
    }
}

class LayerDelegate: NSObject, CALayerDelegate {
}

1 个答案:

答案 0 :(得分:2)

该对象已从内存中删除,因为没有强引用。正如另一个@Robert指出的那样,CALayer' delegateweak,一旦你离开范围,即viewDidLoad()函数,该对象就会被删除来自记忆。

您需要确保它未被释放。您可以向班级添加属性。只要班上生活,这就会存在。

class ViewController: UIViewController {
    let layerDelegate = LayerDelegate()
    override func viewDidLoad() {
        super.viewDidLoad()
        let myLayer = CALayer()
        myLayer.delegate = layerDelegate
        view.layer.addSublayer(myLayer)
    }
}