SwiftUI中的CALayer相当于什么?

13

UIViews已知为层支持,但SwiftUI View是否也是如此尚不确定。在SwiftUI中是否有类似于层的概念,可以添加为子层,进行动画处理,并可执行与CALayer相同的所有操作?


1
不确定...但从示例代码中看来,它们似乎移除了层的概念。 - Mehul Thakkar
如果他们已经移除了CALayer,那么在SwiftUI中提供所有功能可能需要更多的工作。不知道它如何与Metal/OpenGL接口。 - Deepak Sharma
记住你总是可以将UIKit对象包装在SwiftUI视图中;Apple的一个示例使用MKMapView展示了这一点-但你也可以本地执行很多操作。参见https://youtu.be/wBcLFEtZ8A4 例如 - Paulw11
@Paulw11 这是一个好东西,但问题是如果SwiftUI不能完全替代UIKit,那么使用它进行开发任务是否更容易(如果不是更困难)? - Deepak Sharma
2
我还没有真正深入研究过它,但到目前为止,它看起来几乎会更好;您可以在画布或代码中进行可视化工作,当您这样做时,代码或画布将实时更新。 SwiftUI是否能够满足所有人的需求?可能不是,但Interface Builder也不是。Interface Builder在版本控制方面存在问题,特别是在团队合作时。编程UI开发速度较慢,因为您需要不断运行代码以查看其是否正确;SwiftUI似乎解决了这两个问题。 - Paulw11
3个回答

7
在“使用SwiftUI构建自定义视图”演讲中,他们展示了视图和绘制模型/接口在框架下本质上已经合并。因此,一个视图具有类似于图层的属性,但是建立在视图本身而不是图层抽象之上。
来源: https://developer.apple.com/videos/play/wwdc2019/237/

4
import SwiftUI
import AVFoundation

struct DrawingView: UIViewRepresentable {

    private let view = UIView()

    var layer: CALayer? {
        view.layer
    }

    func makeUIView(context: Context) -> UIView {
        view
    }

    func updateUIView(_ uiView: UIView, context: Context) { }
}

0

通过跳转到View的定义,检查所有SwiftUI方法,如下所示:

enter image description here

在那个文件中,我可以看到所有的UI控件和我们作为开发者可以访问的所有方法都列在那里。在这里,我发现没有任何类似于层的概念。但是,所有层的属性 - 如cornerRadius、borderWidth、borderColor、shadow等都已经在那里定义了。因此,我认为在SwiftUI中很少有这样的概念。
对于我的这个答案仍然不确定。

1
我们只是不知道引擎盖下面有什么。 - imike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接