UIScrollView не вызывает layoutSubviews при масштабировании на iOS 4.0 - PullRequest
0 голосов
/ 27 апреля 2011

Я прочитал многие вопросы UIScrollView, заданные здесь, но ни один из них не ответил на эту проблему.

У меня есть UIScrollView, который увеличивает представление, содержащее другие подпредставления.Когда происходит увеличение, мне нужно, чтобы подпредставления вида перемещались в определенные места.Я могу сделать это, изменив соответствующие кадры в методе layoutSubviews UIScrollView.

На iOS 3.2 и ниже, это прекрасно работает как для масштабирования пальцем, так и для прагматического масштабирования с использованием zoomToRect: animated: method.

На iOS 4.0 или выше, это прекрасно работает только для масштабирования пальцем.При прагматическом масштабировании с использованием zoomToRect: animated :, вызов layoutSubviews происходит только один раз (в конце масштабирования).Мне нужно, чтобы этот метод вызывался много раз во время увеличения, чтобы мои подпредставления могли иметь плавные изменения положения вместе с масштабированием.

Итак, в итоге, в iOS 3.2, вызов layoutSubviews происходит много рази на iOS 4.0 вызов layoutSubviews происходит только один раз, когда вы вызываете zoomToRect: animated :.Кто-нибудь знает решение моей проблемы?

1 Ответ

2 голосов
/ 26 сентября 2011

В IOS 4.0 анимация выполняется ОС - я предполагаю максимально использовать аппаратное ускорение на основе графического процессора. Недостатком этого является то, что становится сложнее анимировать значения, полученные из другого (анимированного) значения. Как и в вашем случае, позиции подпредставлений, которые зависят от уровня масштабирования UIScrollView. Чтобы это произошло, вы должны настроить анимацию подпредставлений так, чтобы она шла параллельно с анимацией масштабирования. Попробуйте что-то вроде:

[UIView animateWithDuration:0.5 delay:0
                    options:UIViewAnimationOptionLayoutSubviews
                 animations:^{
    theScrollView.zoomScale = zoomScale;
    [theScrollView layoutSubViews];
} completion:^(BOOL finished) {}];

Это должно установить свойства фрейма подпредставлений из одного и того же контекста анимации, и, следовательно, ОС должна анимировать их вместе. Я не уверен, нужен ли явный layoutSubViews, или опция UIViewAnimationOptionLayoutSubviews уже достигает этого.

См. Также ответы на этот вопрос: Как заставить UIScrollView отправлять сообщения scrollViewDidScroll во время анимации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...