HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 如何一个接一个链接不同层的核心动画?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个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];
  }
}

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

有任何想法吗?

@L_696_18@

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

例如,沿着这段代码的东西会导致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 – 如何一个接一个链接不同层的核心动画?所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。