Я создаю музыкальный инструмент для iPhone.В моем приложении, когда я касаюсь CALayer, воспроизводится заметка, и слой покачивается на протяжении всей заметки.
Все это прекрасно работало на iOS 4.1, однако я просто обновился до iOS 5.0.1 и столкнулся с серьезными проблемами с запаздыванием, если последовательно нажимал несколько заметок.После большой боли я сузил его до следующего кода анимации покачивания для CALayer, к которому прикоснулись.
// here is an example wiggle
CABasicAnimation *wiggle = [CABasicAnimation animationWithKeyPath:@"transform"];
wiggle.duration = 0.1;
//wiggle.repeatCount = 1e100f;
wiggle.repeatCount = 100;
wiggle.autoreverses = YES;
wiggle.toValue = [NSValue valueWithCATransform3D:CATransform3DRotate(fret.fretLayer.transform,0.2, 0.0 ,1.0 ,2.0)]; //angle, x , y , z
wiggle.fromValue = [NSValue valueWithCATransform3D:CATransform3DRotate(fret.fretLayer.transform,-0.2, 0.0 ,1.0 ,2.0)]; //angle, x , y , z
// doing the wiggle
[note.noteLayer addAnimation:wiggle forKey:@"wiggle"];
Если я блокирую последнюю строку, где анимация добавляется в слой, все лаги немедленно исчезают.Такое ощущение, что основной поток каким-то образом заблокирован или не работает в основном потоке, но я попытался вызвать функцию с executeSelectorOnMainThread: withObject: waitUntilDone: NO, и это не имело никакого значения.Если я нажимаю множество заметок очень быстро, все приложение приостанавливается, а затем, через секунду или около того, оно как будто догоняет само себя, и вдруг все звуки воспроизводятся, и анимация, наконец, начинает все прерывисто и задыхаться после этого.* Кто-нибудь знает какие-нибудь необычные проблемы с CABasicAnimation в iOS 5?Есть ли какие-нибудь альтернативные API анимации, которые я мог бы попробовать, которые также могли бы анимировать CALayers на неопределенную продолжительность при повторении?У кого-нибудь есть какие-либо предложения или предположения относительно того, как исправить / из чего может возникнуть проблема?
РЕДАКТИРОВАТЬ: я решил, что это определенно не имеет ничего общего с природой анимации.Я заменил код покачивания на код, который просто затемняет цвет, но я все еще получаю тот же эффект лага, когда ноты играют с задержкой.
CABasicAnimation *wiggle = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];
wiggle.duration = 2;
wiggle.toValue = (id)[UIColor whiteColor].CGColor ;
wiggle.fromValue = (id)[UIColor colorWithRed:0.1 green:0.2 blue:0.8 alpha:0.4].CGColor;
Подозреваю, что это может быть связано с изменениемв CoreAudio / RemoteIO что ли?И что мешает основной ветке или наоборот?