2009-11-24 128 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