Como chamar scrollViewDidScroll: da mesma forma que o UIScrollView, mas durante a animação personalizada?

Eu tenho um UIScrollView de rolagem horizontal muito grande que está reutilizando suas subvisualizações (move e atualiza quando está fora da área visível, semelhante ao UITableView que está reutilizando células). Isso depende da chamada de delegação scrollViewDidScroll:, que me fornece contentOffset real, e aqui decido quando reutilizar subvisão específica. Por enquanto, tudo bem.

Às vezes eu preciso alterar o contentOffset programaticamente, mas com animação personalizada (inércia e retornar à posição final). Eu posso fazer isso facilmente usando a animação do núcleo.

O problema é que durante a animação personalizada o método delegado scrollViewDidScroll: não é chamado -> devo fazê-lo manualmente para que a reutilização das subvisualizações funcione. Eu tentei chamá-lo com o disparo do timer a cada 0,02 segundos. Agora existem dois problemas:

Eu preciso obter UIScrollView contentOffset usando [[_scrollView.layer presentationLayer] bounds] .origin.x porque durante a animação _scrollView.contentOffset normal não é alterado.

No entanto, informações de presentationLayer não são suficientes para a sincronização exata - às vezes é um pouco tarde.

problema é quando o novo contentOffset está longe da posição atual. Parece que a animação UIScrollView interna é CAKeyframeAnimation e scrollViewDidScroll deve ser chamada nas posições de quadros principais. Mas eu não sou capaz de conseguir isso.

Se eu confiar no temporizador que énão sincronizado com quadros-chave, as visualizações são reutilizadas em lugares errados e não consigo vê-las durante a animação.

Alguém pode lançar alguma luz sobre como e quando exatamente UIScrollView chama scrollViewDidScroll durante setContentOffset: X animado: SIM? É possível reproduzi-lo sem quebrar as regras da appstore?

questionAnswers(1)

yourAnswerToTheQuestion