2009-11-24 125 views
1

我想为我的应用程序添加一些功能,我认为使用CGLayer是最好的方式,但从未做过任何Quartz绘图(除了一些基本教程外)。CGLayer是一个很好的解决方案吗?

我的意图是显示应用程序将在视图的上半部分绘制(基于参数的基本几何形状)的图像的完整视图,并在视图的上半部分显示该图像的放大部分该视图基于用户触摸顶部图像的位置。我想要放大的部分以高分辨率显示,所以我认为应该将图像绘制到640 x 640 CGLayer上,然后在顶部320 x 320的一半视图中绘制完整图层(如此缩放一直到适合)以及用户在视图的左下角160 x 160处触摸的相关部分,但未缩放,因此您会看到主图像的四分之一。

当用户围绕主视图移动手指时,左下角的部分视图将从CGLayer重绘,因此不会发生新的图像渲染,只是CGLayer绘图。

任何人都可以看到我的缺乏经验的大脑可能错过了这种方法的任何问题?

Ta,Jools。

+0

对于任何阅读谁需要有关CGLayer的基本信息,请尝试这个问题... http://stackoverflow.com/questions/4458812/whats-the-difference-and-compatibility-of-cglayer-and-calayer/4594394 #4594394 – Fattie 2012-04-17 14:08:01

回答

2

看看CALayer和它的contentsRect参数。它会给你一个相当简单的方法来完成你想要的东西。您可以将图像视图的层的内容复制到您的缩放视图层是这样的:

[[zoomView layer] setContents:[[tapImageView layer] contents]]; 

然后,设置contentsRect这样的:

[[zoomView layer] setContentsRect:CGRectMake(x, y, 0.25, 0.25)]; 

你会计算x和y,并在调用此touchesMoved。此代码中设置为0.25的宽度和高度表示图像在缩放视图中显示的百分比。

让我知道你是否需要澄清。

+0

感谢您的回应马特,这是有道理的,看起来像我需要做的事情 - 但我努力寻找信息,是如何创建我的初始640x640图像,用作缩小视图的来源以及放大视图。我对CGLayers的理解是,它们继承了创建它们时使用的上下文的大小 - 我如何创建一个更高分辨率的图层(640x640)然后绘制它? Jools。 – Jools 2010-01-08 19:55:12

+0

我写了一些示例代码来玩这个。你可以在这里下载它:http://www.cimgf.com/files/TapZoom.zip。它需要有一些扭曲的工作,但它展示了我所指的基本功能。另外,CGLayers是你制作它们的任何尺寸。每个UIView都有一个根层,它的大小默认为父级的大小。如果你想创建一个更大的* canvas *来绘制,只需创建一个更大的UIView。 – 2010-01-08 23:38:56