Основные анимации анимации выполняются в отдельном потоке. Когда вы включаете изменение в contentOffset в блок beginAnimations / commitAnimations, это изменение будет постепенно анимироваться. Поворот прокрутки текста, который происходит дальше, вне блока анимации, будет выполнен мгновенно. Поскольку оба взаимодействуют с одним и тем же элементом управления в разных потоках, неудивительно, что вы получаете странное поведение.
Если вы хотите анимировать вращение текста так же, как и contentOffset, переместите эту строку кода в блок анимации.
Если вы хотите, чтобы вращение происходило после завершения анимации изменения смещения, настройте метод делегата обратного вызова. Вы можете использовать код в начале вашего анимационного блока, подобный следующему:
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(contentOffsetAnimationHasFinished:finished:context:)];
, который требует от вас реализации метода делегата, подобного следующему:
- (void)contentOffsetAnimationHasFinished:(NSString *)animationID finished:(BOOL)finished context:(void *)context;
{
// Do what you need to, now that the first animation has completed
}
РЕДАКТ. (06.02.2009):
Я только что создал упрощенную версию вашего приложения, используя только боковую прокрутку текста, и не вижу проблем с анимацией на устройстве с любым количеством символов. Я удалил все посторонние вызовы для разметки кнопок и т. Д. И только анимировал текст. Вместо того, чтобы применять преобразование вращения к представлению прокрутки каждый раз, когда вы нажимаете кнопку, у меня оно начинает вращаться и остается таким же.
Я подумал, что это может быть проблема с размером слоя, так как iPhone имеет ограничение размера текстуры 1024 x 1024 (после чего вам нужно использовать CATiledLayer для поддержки вашего UIView), но я смог выложить текст шире, чем 1024 пикселей и до сих пор есть эта работа.
Полный проект Xcode, демонстрирующий это, можно загрузить здесь . Я не знаю, в чем ваша проблема, но дело не в коде анимации текста, который вы здесь представляете.