我试图快速绘制一些复杂的图。我想要做的是首先在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的图形有什么区别?
您不为图层提供上下文。它已经有上下文;当它调用draw(in:)
时,它只是向您提供对该上下文的引用,因此您可以显式地对其进行绘制。实际上,这比视图更好,因为使用视图,您必须通过调用UIGraphicsGetCurrentContext获得对上下文的引用。
仍然,如果图层属于视图,通常无需使用图层的draw方法-因为您已经有了view draw方法。通常,仅当图层not为视图的底层时,才需要使用图层绘制方法。
请注意,您永远不会调用这两种方法!他们被呼唤你。您要做的是implement它们,以便在调用它们时就可以在其中,准备说什么图形应该进入视图/图层。