设为首页 加入收藏

TOP

Core Animation 再次浅析(二)
2015-07-20 17:51:57 来源: 作者: 【 】 浏览:6
Tags:Core Animation 再次 浅析
动画一个过渡特效

// Create the Core Image filter, setting several key parameters.

  CIFilter* aFilter = [CIFilter filterWithName:@"CIBarsSwipeTransition"];

  [aFilter setValue:[NSNumber numberWithFloat:3.14] forKey:@"inputAngle"];

  [aFilter setValue:[NSNumber numberWithFloat:30.0] forKey:@"inputWidth"];

  [aFilter setValue:[NSNumber numberWithFloat:10.0] forKey:@"inputBarOffset"];

  // Create the transition object

  CATransition* transition = [CATransition animation];

  transition.startProgress = 0;

  transition.endProgress = 1.0;

  transition.filter = aFilter;

  transition.duration = 1.0;

  [self.imageView2 setHidden:NO];

  [self.imageView.layer addAnimation:transition forKey:@"transition"];

  [self.imageView2.layer addAnimation:transition forKey:@"transition"];

  [self.imageView setHidden:YES];

注意:当在动画中使用Core Image过滤器时,配置过滤器是技巧性最强的地方。比方说,使用栏擦除过渡特效,指定一个输入角度,如果角度过大或过小可能导致没有过渡特效发生。如果你没有看到你期望的动画,尝试将你的过滤器参数调整为不同的值再运行查看。



显式事务可以改变动画的参数

对图层属性的每次更改都是事务的一部分。CATransaction类管理动画的创建和分组并在适当的时间执行动画。在大部分情况下,你不需要创建你自己的事务。无论什么时候,给图层添加显式或隐式动画,Core Animation会自动创建一个隐式事务。然而你也可以创建显式事务以能够更精确的管理动画。

使用CATransaction类提供的方法创建与管理事务。通过调用begin类方法,可以开始(或隐式地创建)一个新的事务;调用commit类方法可结束一个事务。两个方法之间的代码就是作为事务部分的变化。比如说,改变一个图层的两个属性,你可以使用清单5-5所示代码。

清单5-5 创建显式事务

[CATransaction begin];

theLayer.zPosition = 200.0;

theLayer.opacity = 0.0;

[CATransitoin commit];


使用事务的主要一个原因是显式事务的限制内,你可以改变动画的持续时间,定时函数以及其他参数。你也可以赋值一个完成块给整个事务,这样当动画组完成后能够得到一个通知。改变动画参数须要在事务字典中使用setValue:forKey:方法更改适当的键。比如说,为了改变默认的持续时间为10秒,则你需要改变kCATransactionAnimationDuration键,如清单5-6所示。

清单5-6 改变动画默认的持续时间

[CATransaction begin];

[CATransaction setValue:[NSNumber numberWithFloat:10.0f];

forKey:kCATransactionAnimationDuration];

[CATransaction commit];

在你想提供不同默认值给不同的动画集合的情况下你可以内嵌事务。为了一个事务中内嵌一个事务,仅需要再次调用begin类方法。每一个begin类方法必须有一个与之配对的commit类方法。仅在你提交了对最外层事务的变化之后,Core Animation开始相关的动画。

清单5-7显式了一个事务中嵌套另一个事务的例子,内层的事务改变与外层的事务相同的动画属性,但是使用不同的值。

清单5-7 内嵌显式事务

 [CATransaction begin]; // Outer transaction

  // Change the animation duration to two seconds

  [CATransaction setValue:[NSNumber numberWithFloat:2.0f]

                   forKey:kCATransactionAnimationDuration];

  // Move the layer to a new position

  theLayer.position = CGPointMake(0.0,0.0);

  [CATransaction begin]; // Inner transaction

  // Change the animation duration to five seconds

  [CATransaction setValue:[NSNumber numberWithFloat:5.0f]

                   forKey:kCATransactionAnimationDuration];

  // Change the zPosition and opacity

  theLayer.zPosition=200.0;

  theLayer.opacity=0.0;

  [CATransaction commit]; // Inner transaction

  [CATransaction commit]; // Outer transaction



首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDOJ 4968 Improving the GPA 下一篇C++11 新特性(5) 统一初始化

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++ 语言社区-CSDN社 (2025-12-24 17:48:24)
·CSDN问答专区社区-CS (2025-12-24 17:48:22)
·C++中`a = b = c`与` (2025-12-24 17:48:19)
·C语言结构体怎么直接 (2025-12-24 17:19:44)
·为什么指针作为c语言 (2025-12-24 17:19:41)