给视图添加映射 并使之弹跳
来源:互联网 发布:淘宝怎么买vr资源 编辑:程序博客网 时间:2024/04/30 19:25
#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];//用这个方法来画出按钮 并指定其要调用的方法