Наиболее неопровержимый довод для использования MSBuild (по крайней мере, в.NET 3.5 и вне) - механизм сборки может создать одновременно.
Это означает, что огромная скорость в Ваших сборках в Вас имеет несколько ядер/процессоров.
До 3,5, MSBuild не сделал параллельных сборок.
Вы почти у цели.
CABasicAnimation *crossFade = [CABasicAnimation animationWithKeyPath:@"contents"];
crossFade.duration = 5.0;
crossFade.fromValue = image1.CGImage;
crossFade.toValue = image2.CGImage;
[self.imageView.layer addAnimation:crossFade forKey:@"animateContents"];
Обратите внимание, что анимация не зависит от фактических значений / содержимого UIImageView. Поэтому вам нужно
self.imageView.image = image2;
... установить окончательный результат для вашего изображения.
Я предлагаю просто использовать два UIImageView
друг над другом. Наверху есть image1, а внизу image2:
- (void) crossfade {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:.5];
imageView1.alpha = !imageView1.alpha;
[UIView commitAnimations];
}
Оно будет плавно переходить между двумя изображениями, когда вы его вызовете. Если вы хотите просто сделать одно затухание и удалить первое изображение после того, как закончите:
- (void) crossfade {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:.5];
[UIView setAnimationDelegate:imageView1];
[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)];
imageView1.alpha = 0
[UIView commitAnimations];
}
Изменить:
Если вы ищете причину, по которой ваш код не работает, это потому, что вы просто установка свойства для нового изображения, а затем добавление бесполезной анимации. CABasicAnimation
имеет fromValue
и toValue
, которые необходимо установить, затем добавить эту анимацию к слою, и она должна выполнить анимацию. Не устанавливайте содержимое вручную.