ios – 如何一个接一个链接不同层的核心动画?

ios – 如何一个接一个链接不同层的核心动画?,第1张

概述我有一个scrollView启用分页和N个页面,它们是UIViews作为scrollView的子视图. 我正在尝试执行以下 *** 作: 用户滚动到页码n. 此时,7个CALayers先前添加到页码n (即,[[scrollView subviews] objectAtIndex:n-1] .layer subLayers])逐渐淡入淡出. 但是我无法弄清楚如何使CALayers依次淡入淡出.至此,我从控 我有一个scrollVIEw启用分页和N个页面,它们是UIVIEws作为scrollVIEw的子视图.

我正在尝试执行以下 *** 作:

用户滚动到页码n.
此时,7个CALayers先前添加到页码n
(即,[[scrollVIEw subvIEws] objectAtIndex:n-1] .layer subLayers])逐渐淡入淡出.

但是我无法弄清楚如何使CALayers依次淡入淡出.至此,我从控制器的委托方法中尝试了以下3种方法:
(假设我有一个数组到图层,并且它们的不透明度在创建时被设置为0)

- (voID)scrollVIEwDIDEndDecelerating:(UIScrollVIEw *)scrollVIEw{  int pageNumber = floor(self.scrollVIEw.contentOffset.x / self.scrollVIEw.frame.size.wIDth);  if(pageNumber == (n-1))  {    int timeOffset = 0;    [CATransaction begin];    for(CALayer *layer in layerArray)    {      CABasicAnimation *a = [CABasicAnimation animationWithKeyPath:@"opacity"];      a.duration = 6;      a.beginTime = timeOffset++;      a.fromValue = [NSNumber numberWithfloat:0.];      a.tovalue = [NSNumber numberWithfloat:1.];      [layer addAnimation:a forKey:nil];    }    [CATransaction commit];  }}- (voID)scrollVIEwDIDEndDecelerating:(UIScrollVIEw *)scrollVIEw{  int pageNumber = floor(self.scrollVIEw.contentOffset.x / self.scrollVIEw.frame.size.wIDth);  if(pageNumber == (n-1))  {    int timeOffset = 0;    [CATransaction begin];    for(CALayer *layer in layerArray)    {      CABasicAnimation *a = [CABasicAnimation animation];      a.duration = 6;      a.beginTime = timeOffset++;      [layer addAnimation:a forKey:@"opacity"];      [layer setopacity:1];    }    [CATransaction commit];  }}- (voID)scrollVIEwDIDEndDecelerating:(UIScrollVIEw *)scrollVIEw{  int pageNumber = floor(self.scrollVIEw.contentOffset.x / self.scrollVIEw.frame.size.wIDth);  if(pageNumber == (n-1))  {    int timeOffset = 0;    for(CALayer *layer in layerArray)    {      [CATransaction begin];      CABasicAnimation *a = [CABasicAnimation animation];      a.duration = 6;      a.beginTime = timeOffset++;      [layer addAnimation:a forKey:@"opacity"];      [layer setopacity:1];    }    for(CALayer *layer in layerArray)      [CATransaction commit];  }}

但似乎没有工作.当用户滚动到正确的页面时,所有图层都可以立即显示,没有太多的淡入淡定,绝对不会以任何顺序排列.

有任何想法吗?

解决方法 实际上,事实证明,关键是获得当前时间的参考框架,并添加任何时间偏移到当前时间.这也适用于非分组动画.

例如,沿着这段代码的东西会导致n个层(假定存储在某个数组中)依次逐渐淡入淡出,每次取0.8秒.

CGfloat timeOffset = 0;  [CATransaction begin];  for(CALayer *layer in layers)  {    CABasicAnimation *a = [CABasicAnimation animationWithKeyPath:@"opacity"];    a.fromValue = [NSNumber numberWithfloat:0.];    a.tovalue = [NSNumber numberWithfloat:1.];    a.fillMode = kCAFillModeForwards;    a.beginTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil] + timeOffset;    a.duration = .8;    a.removedOnCompletion = NO;    [layer addAnimation:a forKey:nil];    timeOffset += .8;  }  [CATransaction commit];

在上述情况下,参考框架仅仅是调用发生的当前时间.

总结

以上是内存溢出为你收集整理的ios – 如何一个接一个链接不同层的核心动画?全部内容,希望文章能够帮你解决ios – 如何一个接一个链接不同层的核心动画?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1096140.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存