Новый CATransform3DMakeRotation удаляет старое преобразование? - PullRequest
0 голосов
/ 25 мая 2010

Я добавил CATransform3DMakeRotation к слою. Когда я добавляю еще один, он удаляет старый?

Первый:

[UIView beginAnimations:@"rotaty" context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelegate:self]; 
CGAffineTransform transform = CGAffineTransformMakeRotation(-3.14);
kuvert.transform = CGAffineTransformRotate(transform, DegreesToRadians(134));
kuvert.center = CGPointMake(kuvert.center.x-70, kuvert.center.y+100);
[UIView commitAnimations];

и второй:

CABasicAnimation *topAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
topAnim.duration=1;
topAnim.repeatCount=0;
topAnim.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(0.0, 0, 0, 0)];
float f = DegreesToRadians(180);  // -M_PI/1;
topAnim.toValue=[NSValue valueWithCATransform3D:CATransform3DMakeRotation(f, 0,1, 0)];
topAnim.delegate = self;
topAnim.removedOnCompletion = NO;
topAnim.fillMode = kCAFillModeBoth;
[topAnim setValue:@"flippy" forKey:@"AnimationName"];
[[KuvertLasche layer] addAnimation:topAnim forKey:@"flippy"];

Второй сбрасывает вид и применяет себя после этого. Как мне это исправить ??

1 Ответ

0 голосов
/ 25 мая 2010

Да, CATransform3DMakeRotation() создаст совершенно новое преобразование, которое перезапишет существующее. Если вы хотите изменить существующее преобразование, вы должны использовать CATransform3DRotate(). Например, вы можете изменить ваш второй пример кода со строками

CATransform3D existingTransform = [[KuvertLasche layer] transform];
topAnim.fromValue = [NSValue valueWithCATransform3D:existingTransform];
float f = DegreesToRadians(180);  // -M_PI/1;
topAnim.toValue=[NSValue valueWithCATransform3D:CATransform3DRotate(existingTransform, f, 0,1, 0)];

Обратите внимание, что если одна анимация должна выполняться за другой, вам нужно будет использовать обратные вызовы делегата для запуска второго после завершения первого. Анимации выполняются в фоновом потоке, поэтому если обе ваши анимации, определенные выше, запускаются одна за другой, результаты могут быть беспорядочными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...