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

#define ANIMATION_DURATION (0.4) -(void)doit{// CALayer的大部分属性都可以用来实现动画效果。CALayers 是屏幕上的一个具有可见内容的矩形区域,// 每个UIView都有一个根CALayer,其所有的绘制(视觉效果)都是在这个layer上进行的。CALayer是// 属于QuartzCore framework的,所...
摘要由CSDN通过智能技术生成

 

#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];
//用这个方法来画出按钮 并指定其要调用的方法

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值