2008-11-03 58 views
4

目前,我有一個UIView子類,在屏幕上「郵戳」一個2px x 2px的CGLayerRef,最多160 x 240次。如何在iPhone上使用CALayer?

我目前通過移動UIView「向上」屏幕2像素(實際上,一個UIImageView),然後繪製下一個「行」來設置動畫效果。

會使用多個CALayer圖層加快渲染此動畫的性能嗎?

是否有與iPhone SDK一起使用CALayer的教程,示例應用程序或代碼片段?

我問的原因是我發現的大多數代碼片段都演示了CALayer的簡單示例,它們使用的方法調用不適用於iPhone SDK。我很欣賞任何建議或指針。

回答

4

好的,好吧,如果你想要一些有很好的CA好例子來繪製這樣的東西並在手機上工作,我推薦Jens Aflke發佈的GeekGameBoard代碼(它是一些蘋果演示的改進版本碼)。

根據你所描述的,我認爲你正在做的事情比需要的複雜得多。我的印象是,你基本上想要一個靜態的視圖,你正在通過改變它的位置來進行動畫處理,以使它部分地在屏幕外。如果你只需要在你的drawRect中設置一些靜態內容,那麼通過圖層不會比用你的顏色調用CGFillRect()更快。之後,您可以使用隱式動畫和UIView上的動畫代理來移動視圖。我懷疑你甚至可以擺脫自定義drawRect:實現與圖案的UIColor,但我真的沒有基準兩者之間的差異。

3

你看到哪些CALayer方法不適用於iPhone?除了與CoreImage綁定的動畫功能外,我還沒有注意到很多缺失的東西。你可能會注意到的一件大事情是,所有的視圖都是層次支持的(所以你不需要做任何特殊的事情來使用圖層,你可以通過圖層訪問器方法來獲取UIView的圖層),座標系統有一個頂部左起源。

無論如何,通常擁有更多的東西比擁有更少的東西要慢。如果你只是一遍又一遍地重複相同的模式,你可能會發現最好的性能是實現一個自定義的UIView/CALayer/UIColor,它知道如何繪製你想要的東西,而不是將視覺上相同的圖層或視圖放在一起。

話雖如此,一般來說圖層比視圖重量輕,所以如果你有很多單獨的元素,你需要保持邏輯分離,你會發現移動到圖層可以贏得使用視圖。

您可能想看看 - [UIColor initWithPatternImage:],具體取決於您正在嘗試執行的操作。如果您使用這兩個像素圖案作爲背景色,您可以製作一個UIColor來繪製它並設置背景。

1

你看到哪些CALayer方法不適用於iPhone?

作爲一個例子,我嘗試實施網格演示here,沒有太多的運氣。看起來CAConstraintLayoutManagerCAConstraintQuartzCore.h中不可用。

在另一種嘗試,我嘗試了很簡單的,小的20×20 CALayer對象我UIView的圖層屬性的子層,但沒有顯示出來。

現在,我有一個自定義UIView其中我重寫了drawRect方法。在drawRect我抓住上下文並渲染兩種類型的CGLayerRef s:

在「關閉」單元格中,我在整個320x480畫布上繪製背景顏色。

在「on」單元上,我在320x480像素的網格(初始化)或320x2行(動畫)上繪製單個CGLayerRef

在動畫過程中,我從320x478像素製作一個UIImageView剪輯視圖,並繪製一行。這個「推動」我的位圖一次在屏幕上兩個像素。

基本上,我想測試是否使用CALayer不將完成兩件事情:

  1. 讓我更快的渲染,如果CALayer開銷較少比我現在做
  2. 讓我動畫更加平滑,通過讓我轉變了一層了畫面流暢

不幸的是,我似乎無法得到一個基本的CALayer目前的工作,並沒有發現的示例代碼塊好看看和p躺着。