我正在尝试设置一个 CALayer
的委托(delegate),以便我可以使用 draw(_:in:)
。 documentation描述了如何去做。但是一旦我设置了委托(delegate),就会出现运行时错误:
Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
这是生成错误的代码。在 Xcode 8.2.1 中替换 Single View Application 模板中的 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 {
}
最佳答案
对象被从内存中移除,因为没有对它的强引用。正如另一个@Robert 所指出的,CALayer
的delegate
是weak
,一旦你离开作用域,即 viewDidLoad( )
函数,对象从内存中移除。
您需要确保它没有被释放。您可以向您的类(class)添加一个属性。只要类存在,它就会存在。
class ViewController: UIViewController {
let layerDelegate = LayerDelegate()
override func viewDidLoad() {
super.viewDidLoad()
let myLayer = CALayer()
myLayer.delegate = layerDelegate
view.layer.addSublayer(myLayer)
}
}
关于ios - 如何为 CALayer 设置委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41828621/