我有几个带有很多子视图的视图,并且在动画期间性能很差。
一种可能有所帮助的方法是通过将层次结构呈现到上下文中来展平层次结构。为此,我希望能够展平的每个视图都必须以这样一种方式构造,即它们的所有子视图都添加到容器中,而不是直接添加到视图中。此外,我必须实现 -drawRect: 来执行层次结构的展平:
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
[self.containerLayer renderInContext:context];
}
诀窍是这个容器层没有添加为self.layer
. 对于核心动画,它看起来层次结构是平的。
但是在尝试这样的事情之前,有没有更好的方法呢?
我担心的是我必须创建一个额外的容器层来保存我想要按需展平的视图的视图层次结构。-drawRect: 仅在我调用 -setNeedsDisplay 时才被调用,所以这看起来很好。
有没有办法在不需要这样的容器的情况下展平视图的子视图?
问题是我的许多子视图都是通过调用 -addSubview: 添加的,所以self.layer
如果我没有容器,那么除了它自己之外,没有任何一层我可以展平。
如果我这样做怎么办:
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
[self.layer renderInContext:context];
}
这不会有多大意义吧?我的意思是子视图的整个层次结构将附加到该层,但是该层与视图相关联,因此将其渲染到上下文中是多余的,因为视图层次结构不会是平坦的。