2012-11-18 32 views
0

Two CALayers如何強制CALayer以更高的分辨率重繪?

我有兩個CALayer子類的實例。

它們之間唯一的區別是這一行:

[self setTransform:CATransform3DMakeScale(2, 2, 2)]; 

我需要什麼,這樣大的層看起來不錯,在規模2倍?

PS:(以避免任何混淆)所述層還包括一些控制按鈕,陰影和圓角,以模仿在窗口系統的窗口的外觀,但這些都不是NSWindows實例。

回答

1

簡短的回答是,不要使用轉換。變換通過放大圖層來縮放圖層,而無需重新渲染。

您可以通過使用CAShapeLayer和動畫更改路徑得到一個非常類似的效果。然而,這會給你銳利的渲染,因爲它的路徑動畫會重新渲染像素。

我說「相似」的效果,因爲CAShapeLayers使用整個圖層的lineWidth屬性。您可以爲值之間的線寬設置動畫,並使用小數值,但您必須進行一些微調以使線條粗細根據形狀的大小成比例上下動畫。另一個考慮因素是圖形系統使用抗鋸齒來繪製分數寬度路徑,所以當線寬不是整數值時,它們看起來會稍微軟一些。你可以關閉抗鋸齒功能,但是這樣看起來會非常麻煩。

+0

所以我想我應該設置一個新框架,並根據新的比例因子重新計算我的元素的位置和比例。我認爲drawInContext中繪製的所有內容都是基於pdf的 - 因此縮放比例很好。 – alecail

+0

「drawInContext中繪製的所有內容都是基於pdf的」?是什麼讓你覺得呢?圖層上的變換矩陣縮放圖層的像素。 –

+0

大多數處理CGPath對象的方法都需要進行轉換。文檔說,在將其應用於路徑之前,將變換應用於該形狀。我沒有嘗試過,但我認爲這意味着它將變換應用到路徑的座標。因此,您應該可以使用transform參數來無縫縮放您的路徑。 (我之前並沒有嘗試過使用轉換創建CGPath,因此您必須進行試驗。) –

相關問題