从基础开始学习UIScrollView和CATiledLayer

5

我的情况是:我创建了一个UIScrollView,里面有一个UIView,它调用一个绘制漂亮图形的Graph类。现在我发现,如果它的宽度大于8192像素,手机将无法呈现UIView。实际上,根据苹果的文档,如果我想要它大于1024像素,我应该实现CATiledLayer。

但是在阅读和搜索了很多资料之后,我仍然觉得很难理解如何使用CATiledLayer-我在石英 vs. Cocoa 和 layers 和 sublayers vs. views 和 subviews之间迷失了方向。

理想情况下,我希望保持Graph类不变,只需完全绘制上下文,将其分成平铺并滚动。ScrollView 只需要水平滚动,不需要缩放或垂直滚动。这是否可能?如果可能,我应该如何继续?

也许有人可以给我一个大纲,一些要点或伪代码,告诉我如何重构scrollview、uiview和graph class以使用平铺。

非常感谢您提前任何回复。

1个回答

4

距离你提出问题已经一个月了,但这个回答可能仍然有用。我刚刚开始使用CATiledLayer。我认为CATiledLayer的想法似乎是将其添加到视图中:

CATiledLayer *tiled = [CATiledLayer layer];
[self.view.layer addSublayer:tiled];

并且需要设置一个代理,实现仅有一个方法:

MyTLDelegate *myDelegate = [[MyTLDelegate alloc] init];
tiled.delegate = myDelegate;
// I haven't checked if CATiledLayer retains myDelegate, check this!

...
@implementation MyTLDelegate {

-(void)drawLayer:(CATiledLayer *)layer inContext:(CGContextRef)ctx
{
    CGRect dirtyRect = CGContextGetClipBoundingBox(ctx);
    // draw!
}

这基本上就是全部内容了,你可以像整个坐标空间已经存在一样绘制。因此,您只需要稍微修改Graph类,使其可以作为CATiledLayer委托进行操作。在我的情况下,这花费了20分钟的时间,将用户体验提高了数倍。(与自己进行繁琐的滚动、缩放和重新绘制相比)
附注:这仅是您要求的伪代码,您可能需要一些额外的粘合剂来启动事情,例如用于质量和/或帧大小。

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