2011-09-23 3 views
1

мой первый вопрос на переполнение стека :)Продолжительность устанавливается с CATransform3DMakeTranslation

Я хочу сделать у оси перевод на CALayer. Я получил большой фон: 320x4000px. Перевод работает со следующим кодом:

NSNumber *deplacement = [NSNumber numberWithFloat:([app.session.progression floatValue] * HAUTEUR_FOND) /100]; 

self.backgroundLayer.transform = CATransform3DMakeTranslation(0, -[deplacement floatValue], 0); 

Но с этим кодом, что невозможно установить длительность ...

Я пытался с этим:

CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@"position.y"]; 
transformAnimation.duration = 5.0f; 
transformAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeTranslation(0, -[deplacement floatValue], 0)]; 
[self.backgroundLayer addAnimation:transformAnimation forKey:@"position.y"]; 

но не работает ...

Спасибо за помощь :)

ответ

2

Хорошо, вот ответ, может быть, это поможет кому-то :)

NSNumber *deplacement = [NSNumber numberWithFloat:([app.session.progression floatValue] * HAUTEUR_FOND) /100]; 
DebugLog(@"deplacement : %@", deplacement); 

if(!backgroundPositionMemo) backgroundPositionMemo = 0; 

CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@"transform"]; 
transformAnimation.duration = 1.0f; 
transformAnimation.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeTranslation(0, -backgroundPositionMemo, 0)]; 
transformAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeTranslation(0, -[deplacement floatValue], 0)]; 
transformAnimation.removedOnCompletion = NO; 
transformAnimation.fillMode = kCAFillModeForwards; 
[self.backgroundLayer addAnimation:transformAnimation forKey:@"transform"]; 

backgroundPositionMemo = [deplacement floatValue]; 
+0

Большое вам спасибо! Я использовал keyPath «origin.x» вместо «transform» в рамках аналогичного кода, и ваш код указал мне в правильном направлении! – iago849