小编Dir*_*aas的帖子

在UIScrollView中设置zoomScale动画时不需要的滚动

执行摘要: 有时UIScrollView会对值进行不必要的更改contentOffset,从而导致应用程序在正在查看的文档中显示错误的位置.不必要的更改与滚动视图的动画更改一起发生zoomScale.

详细信息: 与缩小,当我遇到问题CATiledLayerUIScrollView.该CATiledLayer持有PDF,并在contentOffset一定范围内,当我缩小,将contentOffset被改变(这是BUG)变焦发生之前.在contentOffset似乎在苹果的代码被改变.

为了说明这个问题,我修改了Apple的示例应用程序ZoomingPDFViewer.代码在github上:https://github.com/DirkMaas/ZoomingPDFViewer-bug

点按将导致zoomScale更改为0.5,使用animateWithDuration,因此缩小.如果UIScrollView's contentOffset.y小于约2700或大于5900,则zoomScale动画效果正常.如果contentOffset.y在这两个值之间发生点击,contentOffset.y则会跳转(不动画)到约2700,然后zoomScale动画将发生,但同时会发生滚动,因此当动画完成时,contentOffset.y就是它的位置应该.但跳跃从何而来?

例如,说contentOffset.y屏幕被点击时是2000:zoomScale动画效果很好; contentOffset.y没有改变.

但是如果在contentOffset.y点击屏幕时为4000,那么contentOffset.y将在没有动画的情况下跳转到大约2700,然后缩放和滚动将从该点开始并同时发生.当动画完成时,看起来好像我们从4000直接缩放,所以我们最终在正确的位置,但行为是错误的.

关于用户界面的说明:

  • 文本可以以正常方式垂直滚动
  • 通过正常方式捏合可以放大和缩小文本
  • 单击将导致zoomScale设置为0.5; 变化是动画的

我注意到如果zoomScale大于0.5,那么跳跃不会那么大.此外,如果我使用setZoomScale:animated:而不是animateWithDuration,错误消失,但我不能使用它,因为我需要链接动画.

以下是我所做的总结(github中的代码包含这些更改):

iphone core-animation uiscrollview catiledlayer ios

9
推荐指数
1
解决办法
3546
查看次数

标签 统计

catiledlayer ×1

core-animation ×1

ios ×1

iphone ×1

uiscrollview ×1