单线程CATiledLayer(替代?)

时间:2013-11-19 16:27:23

标签: ios cocoa-touch uiview uiscrollview catiledlayer

CATiledLayer从多个线程调用drawRect - 这意味着我的模型需要是线程安全的。它不是 - 并且使线程安全至少可以说是“乏味的”(无论如何线程都是邪恶的: - )

有人知道如何让CATiledLayer只在主线程上调用drawRect吗?

如果不这样做,有没有人知道我如何拥有一个任意大的视图/层(即没有后备存储内存限制。)

由于

克雷格

2 个答案:

答案 0 :(得分:0)

没有办法让CATiledLayer在主线程上调用drawRect。请注意,这个图层执行多线程的原因是:iOS中的绘图速度非常慢,因此它会尝试使用所有处理器内核。

我不确定支持商店大小目前是否有硬限制(它存在但事情可能已经改变)。无论如何,内存是移动设备中有限的资源,如果覆盖drawRec,则不能有任意大视图。您应该使用平铺仅显示当前可见的内容或使用CAShapeLayer等绘图。

答案 1 :(得分:0)

CATiledLayer有一个私有的类方法

+ (BOOL)shouldDrawOnMainThread;

所以你可以覆盖并返回YES。然后所有绘图周期将在主线程上执行。

这样的代码段

+ (BOOL)shouldDrawOnMainThread
{
    return YES;
}