Ваш вопрос сбивает с толку, потому что вы упоминаете игры с низкой частотой кадров, что заставляет меня задуматься о том, какая из трех проблем у вас возникает:
- Вы получаете так много didUpdateHeading:сообщения о том, что у вас действительно есть проблема с производительностью (в этом случае некоторое кэширование последнего значения и вычисление, чтобы определить, действительно ли вам нужно обновить представление, может быть в порядке)
или
- CoreLocation фактически отправляет вам данные, которые «перепрыгивают» и заставляют ваш дисплей выглядеть нервным
или
- Вы неправильно настроили параметры неявной анимации для неявной анимации, которую вы хотите иметь в свойстве transform
Я предполагаю, что ваша проблема на самом деле секунда , которую я перечислил, и что вы получаете обновления заголовков из основного местоположения, которые "прыгают" из местоположения вместо нахождения.
Есть два подхода к этой проблеме - один перед другим (потому что один легче, а другой сложнее).
Сначала я бы попытался увеличить переходнемного, или, по крайней мере, установите его вручную, чтобы вы знали, что это ... может быть, 2 секунды?
[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:2.0f]
forKey:kCATransactionAnimationDuration];
needle.transform = CGAffineTransformMakeRotation(radianConst*-h);
[CATransaction commit];
Если это не удастся, вам придется кое-что придумать и применить какой-то алгоритм сглаживания ... однако, я думаю, я слышал, как разработчик Apple упомянул, что они уже сделали это в одном из своих основных местоположений.видео.