2012-01-10 44 views
1

我已經搜索和搜索,似乎無法找到任何一種方法來使用CoreAnimation動畫自定義類的對象上的屬性或第三方框架來完成任務。任何人都可以談談這個問題?任意對象和屬性的非CALayer動畫框架

我特別的用例是我想動畫一個屬性,每個繪製時都會以OpenGL制服的形式傳遞。

+0

自定義子類是什麼?你想要哪些屬性動畫? 「OpenGL制服」是什麼意思?爲什麼不CALayer?這是_is_如何動畫UIView/CALayer的屬性。 – bshirley 2012-01-10 18:00:31

+0

對不起,我感到困惑。回答你的問題:NSObject的一個子類;我創建的任意屬性; OpenGLES 2 GLSL着色器在使用glUniform1f()進行繪製之前設置的統一變量。可以爲CALayer子類上的自定義屬性設置動畫效果嗎?無論如何,我通過一個委託來控制一個通用的GLKView,所以我實際上沒有辦法在這個層上創建一個新的屬性,除非我做一些冗長的重構。我設想了一個沿着[ANAnimationClass animiationWithObject:someObject forKeyPath:「someproperty」startValue/timingFunction等]行的API – 2012-01-11 09:36:11

+0

「可以在CALayer子類上設置動畫定製屬性」?當然。這是CALayer構建方式的主要優點之一。 (請參閱我的解釋:http://www.apeth.com/iOSBook/ch17.html#_making_a_property_animatable)然而,這並不意味着它可以爲_this_屬性完成,其性質我完全沒有理解。 – matt 2014-05-30 17:54:21

回答

0

兩個細選項我發現:

PRTween:https://github.com/domhofmann/PRTween

POP(被Facebook):https://github.com/facebook/pop

PRTween上簡潔勝...

[PRTween tween:someObject property:@"myProp" from:1 to:0 duration:3];

POP爲FB Paper應用程序開發了一些有趣的動畫曲線。這對於定製道具來說更加複雜一些,但是如果您不再進一步挖掘,您將獲得更多靈活性:

POPSpringAnimation *anim = [POPSpringAnimation animation];  
prop = [POPAnimatableProperty propertyWithName:@"com.foo.radio.volume" initializer:^(POPMutableAnimatableProperty *prop) { 
    // read value 
    prop.readBlock = ^(id obj, CGFloat values[]) { 
    values[0] = [obj volume]; 
    }; 
    // write value 
    prop.writeBlock = ^(id obj, const CGFloat values[]) { 
    [obj setVolume:values[0]]; 
    }; 
    // dynamics threshold 
    prop.threshold = 0.01; 
}]; 

anim.property = prop;