给视图添加映射 并使之弹跳

来源:互联网 发布:淘宝怎么买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];//用这个方法来画出按钮 并指定其要调用的方法




原创粉丝点击