ios - 如何为 CALayer 设置委托(delegate)?

标签 ios swift delegates swift3 calayer

我正在尝试设置一个 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 所指出的,CALayerdelegateweak,一旦你离开作用域,即 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/

相关文章:

ios - 如何使用 Swift 从 UITableViewCell 中删除 Firebase 中的特定子节点

c# - Lambda 事件处理程序范围

c# - 如何为 Action<T1,T2> 获取可选参数

ios - 在 TableView 单元格中显示来自 Firebase 的数据

c# - + 运算符如何用于组合委托(delegate)?

ios - 如何使用 Apple MapKit 从 VisibleRegion 获取纬度/经度坐标?

iOS - 自定义配置 - "No such module"

ios - 手动旋转 UIView 而不是自动旋转

ios - 在我的表格 View 中设置单元格时索引超出范围

ios - 开发一个 ARKit 应用程序,留下文本供其他人查看