Създавам музикален инструмент за 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"];
Ако блокирам последния ред, където анимацията е добавена към слоя, цялото забавяне изчезва веднага. Имам чувството, че главната нишка е блокирана по някакъв начин или не работи в главната нишка, но се опитах да извикам функцията с performSelectorOnMainThread: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 може би? И това пречи на основната нишка или обратното?