2009-09-09 26 views
0

我是Quartz的新手,我正在努力理解这个东西,苹果认为它非常简单直接。如何使用Quartz和CGLayers在背景上绘制精灵图形?

我已经创建了两个CGLayers:一个用于固定背景,另一个用于精灵。我想让这个精灵移动。

背景上下文和精灵上下文都是从屏幕上拖出来的,我希望能够在屏幕上看到两者。

要做到这一点 - 我不知道这是正确的方式 - 我已经做了以下内容:

  1. 我创建使用

    一个的UIImageView
  2. 我已经捕获层的内容

    referencedImage = UIGraphicsGetImageFromCurrentImageContext();
    myView.image = resultingImage;

这显示我在屏幕上的石英层的内容。

现在我有两个问题:

  1. 这种方法是缓慢的地狱
  2. 当我移动图层,我不得不重复提到的代码和即使这样,该层是不动! !

因此,请iPhone大师在那里,请告诉我,如果有另一种方式与石英和我必须做的,看到精灵移动如何做到这一点!!!!

感谢您的任何帮助!

回答

2

使用CALayer s的主要原因是让GPU直接合成到屏幕内存上。使用UIGraphicsGetImageFromCurrentImageContext()会导致图像在GPU上合成,转移到主存储器,然后再返回到屏幕上,这会非常慢。你应该做的却是让您的视图的层的新层子层:

[self.view.layer addSublayer:myNewLayer]; 

有关如何使用CALayer在游戏中的看到一个很好的例子:GeekGameBoard

+0

谢谢!我使用CGLayers的原因是因为我允许用户通过捏(缩放,旋转等)来转换精灵,并且我会将结果(背景+转换后的精灵)保存到文件末尾。你可能会说:你为什么不使用CALayer,记录对精灵的所有转换并将它们应用于屏幕后的高分辨率版本?是的,我就是这样开始的,但经过三天的各种问题之后,我决定采用这种方法。我搜索了一下,从来没有找到如何做到这一点,并在几个论坛上发布的问题后,没有人回答。 – SpaceDog 2009-09-09 19:39:15

+0

我曾尝试阅读Quartz的苹果文档,但作为所有的苹果文档,他们都是由脑外科医生完成脑外科医生,我的意思是,你必须是黑带第三丹才能理解,因为文档含糊不清,我笑得歇斯底里对所有的例子来说,因为不是像“从A点移动到B点的例子”那样简单,Apple创造了一个例子,例如“如何用2万亿行代码创建行星地球矢量插图”。 。苹果淹没了开发人员的洪水,123万亿文档,没有人会完全理解。这些家伙疯了。 – SpaceDog 2009-09-09 19:44:25

+1

如果我理解正确,您想要在图像顶部叠加一个精灵,显示并让用户与它交互,然后保存更高分辨率的合成图像版本?做到这一点的一种方法是最后将CALayer及其子图层直接分层渲染到高分辨率图像中。我们在Core Plot框架中执行PDF渲染(请参阅CPLayer类):http://code.google.com/p/core-plot/ – 2009-09-09 23:14:56