#define ANIMATION_DURATION (0.4)
-(void)doit
{
// CALayer的大部分属性都可以用来实现动画效果。CALayers 是屏幕上的一个具有可见内容的矩形区域,
// 每个UIView都有一个根CALayer,其所有的绘制(视觉效果)都是在这个layer上进行的。CALayer是
// 属于QuartzCore framework的,所以需要引入QuartzCore framework,另外在程序中包括
// #import <QuartzCore/QuartzCore.h>这个头文件
CALayer *reflectionLayer = [CALayer layer];
reflectionLayer.contents = [self.view layer].contents; //在屏幕上显示图像
reflectionLayer.opacity = 0.4 //视图影射的透明度
reflectionLayer.frame = CGRectOffset([self.view layer].frame,0.5,416+0.5);
//self.viewlayer].frame原先的框架 后面的参数是在x轴y轴的扩张 投影的框架
//x是投影相比原图左错位 y值得是与原图相错的上下距离
reflectionLayer.transform = CATransform3DMakeScale(1.0, -1.0, 1.0);
reflectionLayer.sublayerTransform = reflectionLayer.transform;
//这个属性通常是用作投影矩阵添加视角和其他观看效果到接收方。默认的身份转换。
[[ self.view layer] addSublayer:reflectionLayer];
CALayer *shadowLayer = [CALayer layer];
shadowLayer.frame = reflectionLayer.bounds;
shadowLayer.delegate = self;
[shadowLayer setNeedsDisplay];
// 实例重新缓存其内容可以通过发送以下任何一个方 法setNeedsDisplay或
// setNeedsDisplayInRect:的消息,
// 亦或者设置图层的needsDisplaOnBoundsChange属性为YES
[reflectionLayer addSublayer:shadowLayer]; //上面这两个都是用来定义基本的属性
[[CATransaction begin]; //临时禁用图层的action 的一个例子
[CATransaction setValue:[NSNumber numberWithFloat:ANIMATION_DURATION]
forKey:kCATransactionAnimationDuration];
//ANIMATION_DURATION表示的是图片动画的快慢
//显式事物在你修改图层树之前,可以通过给CATransaction类发送一个begin消息来创建一个显式事务,修改
//完成之后发送commit消息。显式事务在同时设置多个图层的属性的时候(例如当布局多个图层的时候),临时禁
//用图层的行为,或者临时修改动画的时间的时候非常有用。 提供了在图层的属性值间简单的插入
// kCATransactionAnimationDuration使动画的时间使用前面定义的numberWithFloat中的值
// 而不是系统默认的 重载隐式动画的时间 scale it down 按比例减小 改变属性
// CABasicAnimation:为层的属性提供了简单的插值提供简单的layer属性值之间的
// interpolation(是一种图像处理方法,它可以为数码图像增加或减少象素的数目)
CABasicAnimation *shrinkAnimation = [CABasicAnimation animationWithKeyPath:
@"transform.scale"];
shrinkAnimation.timingFunction = [CAMediaTimingFunction functionWithName:
kCAMediaTimingFunctionEaseIn];
shrinkAnimation.toValue = [NSNumber numberWithFloat:0.0];
//缩放到最后的尺度 大于0的数则图像会变大 然后消失
[[self.view layer] addAnimation:shrinkAnimation forKey:@"shrinkAnimation"];
//如果交换中间的那两行代码向下面的代码一样 则效果就不一样了(上面的)一个是图像会向后退再消失(下面的)
//一个是图像就会在原地跳然后消失
// fade it out 淡出 减弱
//如果把上一段注视掉而是把 opacity改为transform.scale会出现同样的结果 这一点我也不太明白 ???
CABasicAnimation *fadeAnimation = [CABasicAnimation animationWithKeyPath:
@"opacity"];
fadeAnimation.toValue = [NSNumber numberWithFloat:0.0];
fadeAnimation.timingFunction = [CAMediaTimingFunction functionWithName:
kCAMediaTimingFunctionEaseIn];
[[self.view layer] addAnimation:fadeAnimation forKey:@"fadeAnimation"];
//可以通过发送消息addAnimation:forKey:给layer来启动显式动画,传递动画类和标识作为参数。
//CAKeyframeAnimation建立连续的动画快提供支持关键帧动画。你指定动画的一个图层属性的关键路径,
//一个表示在动画的每个阶段的价值的数组,还有一个关键帧时间的数组和时间函数。提供了关键帧动画
// 的支持。我们可以指定layer属性进行动画的关键路径,一个包含每一个阶段动画的数组。
CAKeyframeAnimation *positionAnimation=
[CAKeyframeAnimation animationWithKeyPath:@"position"];
CGMutablePathRef positionPath = CGAutorelease(CGPathCreateMutable());
CGPathMoveToPoint(positionPath, NULL, [self.view layer].position.x,
[self.view layer].position.y);
CGPathAddQuadCurveToPoint(positionPath,NULL,[self.view layer].position.x,
- [self.view layer].position.y,
[self.view layer].position.x,
[self.view layer].position.y);
CGPathAddQuadCurveToPoint(positionPath, NULL, [self.view layer].position.x,
- [self.view layer].position.y * 1.5,
[self.view layer].position.x,
[self.view layer].position.y);
CGPathAddQuadCurveToPoint(positionPath, NULL, [self.view layer].position.x,
- [self.view layer].position.y * 2.0,
[self.view layer].position.x,
[self.view layer].position.y);
positionAnimation.path = positionPath;
positionAnimation.timingFunction = [CAMediaTimingFunction functionWithName:
kCAMediaTimingFunctionEaseIn];
//图像变幻的方式
[[self.view layer] addAnimation:positionAnimation forKey:@"positionAnimation"];
[CATransaction commit];
}
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]
initWithTitle:@"Do It"
style:UIBarButtonItemStylePlain
target:self
action:@selector(doit)] autorelease];
//用这个方法来画出按钮 并指定其要调用的方法