【发布时间】:2015-02-05 16:13:31
【问题描述】:
我正在实现一个自定义的 pull-to-refresh 组件。
使用微调器动画创建 CALayer,然后将此层添加到 UICollectionView。图层的速度为零 (self.loaderLayer.speed = 0.0f;),图层动画由 scrollViewDidScroll: 中的 timeOffset 管理。问题出在这里,因为我还想始终在拉空间的中心显示一个加载器,所以我在scrollViewDidScroll: 中更改图层的位置,如下所示:
[self.loaderLayer setPosition:CGPointMake(CGRectGetMidX(scrollView.bounds), scrollView.contentOffset.y / 2)];
但是层位置没有任何反应(调用[self.loaderLayer setNeedsDisplay] 没有帮助)。我知道这是因为零速度。目前我找到了可行的方法(但我不喜欢那个):
self.loaderLayer.speed = 1.0f;
[self.loaderLayer setPosition:CGPointMake(CGRectGetMidX(scrollView.bounds), scrollView.contentOffset.y / 2)];
self.loaderLayer.speed = 0.0f;
如何更改暂停图层的位置?我错过了什么?
【问题讨论】:
-
将
speed设置为0.0f会导致该图层的所有动画暂停;包括定位。实现“微调器动画暂停”的方法可能与您正在执行的方法不同,但如果不查看如何构建微调器层的代码,就很难说出那是什么。 -
只需使用两个不同的层,一个用于设置零速度,另一个用于重新定位。一个可以包含另一个。
-
是的,将用第二层包裹。我只是认为,无论暂停状态如何,都有一种正确的方法可以强制更新位置。谢谢
-
How do you move a CALayer instantly (w/o animation) 的可能重复图层不会移动,因为默认情况下
setPosition是动画的,并且您将动画速度设置为零。所以在没有动画的情况下移动它。 -
@David 感谢您的参考,这正是我想要的:)
标签: ios core-animation calayer