Ios NSTimer毁了我所有的动画

Ios NSTimer毁了我所有的动画,ios,uiviewcontroller,autolayout,nstimer,uianimation,Ios,Uiviewcontroller,Autolayout,Nstimer,Uianimation,我添加了一个NSTimer,它可以更新我的界面,主要是每秒更新10次信息标签。它调用一个函数,将工作分派回主线程 视图控制器还具有滚动视图。我有一个分页系统,当用户点击对应于每个选项卡的选项卡(按钮)时,我可以设置滚动视图从一页移动到另一页的动画。那个滚动动画刚刚停止了——就好像我在调用scrollToRect时动画为否,尽管我在调用它时动画为是 我认为,因为我正在更新我的标签,“自动布局”在后台做了一些狡猾的事情,破坏了我的滚动视图动画。其他使用布局约束移动视图的动画也会发生同样的情况 我知道

我添加了一个NSTimer,它可以更新我的界面,主要是每秒更新10次信息标签。它调用一个函数,将工作分派回主线程

视图控制器还具有滚动视图。我有一个分页系统,当用户点击对应于每个选项卡的选项卡(按钮)时,我可以设置滚动视图从一页移动到另一页的动画。那个滚动动画刚刚停止了——就好像我在调用scrollToRect时动画为否,尽管我在调用它时动画为是

我认为,因为我正在更新我的标签,“自动布局”在后台做了一些狡猾的事情,破坏了我的滚动视图动画。其他使用布局约束移动视图的动画也会发生同样的情况

我知道Autolayout和NSTimer存在问题

我能做些什么来解决这个问题


谢谢

我将创建一个布尔标志,禁止来自计时器方法的更新。在开始动画之前将其设置为
true
,动画完成后将其设置为
false
。您可能还希望在动画完成后“手动”更新数据,以捕获任何被阻止的更新。

如果您创建
UILabel
的子类并覆盖
intrinsicSize
以始终返回常量值,则在更新文本时,它可能不会试图干扰约束布局。但不是100%确定。您可以在开始动画之前尝试设置布尔值,如果设置了布尔值,请让计时器方法延迟更新。在动画结束时,清除布尔值并刷新数据,这正是我刚才尝试的!一个“timer lock”变量,它使计时器块返回而不是更新接口。似乎没有什么区别。内部大小解决方案的问题是,我实际上需要一些标签在更新时更改大小。对,我使用[UIView animate…],而不是使用[sv scrollToVisibleRect…]。在块之前,我将计时器锁设置为YES,在完成处理程序中,我将计时器锁设置回NO。这确实解决了问题。如果你想提出你的意见作为回答,我会接受的。谢谢