2013-08-17 3 views
5

サブクラスのfloatがanimAngleの場合、@dynamicとマークされています。私はサブクラスにメソッドactionForKeyinitWithLayerneedsDisplayForKeydrawInContextを実装しました。どういうわけかCABasicAnimationが返されるCALayerサブクラスがプロパティの変更にアニメートしない

myCASublayer.animAngle = 0.5f; 

が適切層 "animAngle" を使用することができません。

- (id<CAAction>)actionForKey:(NString *)event { 
    if([event isEqualToString:@"animAngle"]) { 
     return [self animationForKey:event]; 
    } 
    return [super actionForKey:event]; 
} 

そして、他の何らかのクラスで

- (CABasicAnimation *)animationForKey:(NSString *)key 
{ 
    NSString *animValue = [[self presentationLayer] valueForKey:key];// Logs as 0 
    CABasicAnimation *anim; 

    if([key isEqualToString:@"animAngle"]) { 
     anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
     anim.repeatCount = HUGE_VAL; 
     anim.autoreverses = YES; 
     //anim.fromValue = [[self presentationLayer] valueForKey:key]; // setting animation value from layer property as in here does not work. 
     anim.fromValue = [NSNumber numberWithFloat:0.5f];   // This works 
    } 
    anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    anim.duration = 0.11; 
    return anim; 
} 

を次のように actionForKeyの定義がありますプロパティ。 私はおそらくここで間違っているでしょうか?

+0

一つは 'animAngle'他は' wiggleAngle' –

+0

@RobvanderVeerであると呼ばれています。そのanimAngle。 – rawatm

+0

@ basstrekerk87、次回コピー/貼り付けがうまくいくと、エラーを保存します!実際に手動でコードをインデントする必要はありません。ボタンを使用するか、3つのバッククォート( ')で開始してください。 –

答えて

1

CocoaHeads Session: Rob Napier on Animating Custom Layer Propertiesは、カスタムアニメーションについての良いプレゼンテーションです。申し訳ありませんが、それはタイプミスでした:;

CALayersが描くん嫌い)

+0

ありがとう、それは動作します。アニメーションが反復カウントで無限であれば、アニメーションは1回だけ与えられます。繰り返されるアニメーションに対してdrawInContextは呼び出されませんか? – rawatm

+0

@ basstrekker87キーのアクションが繰り返しをサポートできるかどうかわかりません。 AFAIKは、多かれ少なかれ、古い値から新しい値への暗黙的なアニメーションです。 –

+0

はい、そうかもしれませんが、CALayersは嫌いです:-) – rawatm

1

animAngle@propertyの場合、このプロパティにはaccessorsを指定する必要があります。
プロパティを@dynamicとマークすると、実行時にこれらのメソッドの実装を動的に提供することになります。したがって、プロパティのアクセサーを提供しないと、アクセスできません。

+0

はanimAngleのアクセサを作成しようとしましたが、まだ動作していませんでした。プロパティ自体の実装を提供するCALayerサブクラスでは@dynamicが必要ですが、変更はまだ更新されていません – rawatm

+0

これはCALayersでは実際には当てはまりません。彼らは... "特別";) –

+0

@DavidRönnqvist:そ​​れは真実ではありません。 Lexandrの回答か、私が追加したコメント。 – rawatm

関連する問題