2012-10-18 71 views
3

我想使用CABasicAnimation將過濾器添加到圖層。我想動畫這個過濾器的一些屬性。我從文檔中看到,filters屬性是可以動畫的,但在同一個文檔中,似乎很難找到一種方法來做到這一點!如何在iOS中使用CoreAnimation動畫製作CIFilter?

那麼,我怎樣才能從一個CABasicAnimation與animationWithKeyPath引用單個過濾器屬性?

[CABasicAnimation animationWithKeyPath:@"filters._FILTER_._PROPERTY_"]; 

這是一個完整的例子,是想告訴你我是如何設法得到它的工作:

//Define the filter 
CIFilter *filterOne = [CIFilter filterWithName:@"CISepiaTone"]; 
[filterOne setDefaults]; 

//Attach it to the Layer 
self.layer.filters = [NSArray arrayWithObject:filterOne]; 

//HERE THE PROBLEM --------------------------------------- 
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"filters.???????.inputIntensity"]; 
//EOF HERE THE PROBLEM ----------------------------------- 

//Define the Animation settings 
animation.delegate = self; 
animation.fromValue = [NSNumber numberWithInt:0]; 
animation.toValue = [NSNumber numberWithInt:1]; 
animation.duration = 0.3; 
...etcetc... 
+0

你試過簡單的@「filters.property」嗎?如果你只有一個數組中的過濾器,這可以工作,因爲'setValue:forKeyPath'將應用於數組的每個元素。不知道多個過濾器... – amadour

+0

@amadour過濾器是一個NSArray。它不能被引用,因爲它是單個過濾器對象。我現在用這種方式使用過濾器的名稱:@「filters.CISepiaTone.inputIntensity」,但我得到了一些其他問題... – MatterGoal

回答

6

我不認爲圖層過濾器特性在所有工作中的iOS。最近在Apple的網站上的Apple Core Animation論壇上對此進行了討論,而一名經過「Rincewind」的蘋果工程師發佈說,層過濾器功能根本沒有在iOS上實現。

documentation說:

的iOS注:雖然在iOS中的CALayer類公開filters屬性, 核心形象是不可用的。目前可用於此 屬性的過濾器未定義。

據我所知,只能通過直接調用CI濾波器並獲取CIImage作爲輸出來使用CI濾波器。然後您必須通過代碼使用CIImage。

+1

從iOS 6.1開始,文檔現在說:此屬性不支持圖層在iOS中。因此,文檔已經趕上了現在支持CIFilter的事實,但您無法像在Mac OS中那樣將過濾器附加到圖層。 –