为什么UIView有自己的CGContext,但是CALayer没有?

问题描述 投票:0回答:1

我试图快速绘制一些复杂的图。我想要做的是首先在CALayer上绘制CGPath,然后将CALayer添加到底部视图中。 (因为我需要在CALayer中以及不同的CALayer之间使用不同的混合模式)但是,我发现CALayer的绘制函数与UIView的绘制函数存在显着差异

//UIView's draw function
func draw(_ rect: CGRect)
//CALayer's draw function
func draw(in ctx: CGContext)

我已经注意到我必须给CALayer一个CGContext,这是否意味着CALayer无法绘制自身? UIView的图形和CALayer的图形有什么区别?

ios swift uiview calayer
1个回答
0
投票

您不为图层提供上下文。它已经有上下文;当它调用draw(in:)时,它只是向您提供对该上下文的引用,因此您可以显式地对其进行绘制。实际上,这比视图更好,因为使用视图,您必须通过调用UIGraphicsGetCurrentContext获得对上下文的引用。

仍然,如果图层属于视图,通常无需使用图层的draw方法-因为您已经有了view draw方法。通常,仅当图层not为视图的底层时,才需要使用图层绘制方法。

请注意,您永远不会调用这两种方法!他们被呼唤你。您要做的是implement它们,以便在调用它们时就可以在其中,准备说什么图形应该进入视图/图层。

© www.soinside.com 2019 - 2024. All rights reserved.