zoukankan      html  css  js  c++  java
  • iOS 力学动画生成器UIKit Dynamics 之碰撞效果讲解

            UIKit Dynamic是iOS7 新增的一组类和方法,可赋予UIView逼真的行为和特征,不需要写动画效果那些繁琐的代码,让开发人员能够轻松地改善应用的用户体验。一共有6个可用于定制UIDynamicAnimator的类,这里先只简单介绍下碰撞的动画效果,即UICollisionBehavior。需要签订一个代理协议:UICollisionBehaviorDelegate。其他效果,后续更新,敬请期待。

            注意:dragonImageView和frogImageView记得要初始化还有: UIDynamicAnimator、UIGravityBehavior、 UICollisionBehavior一定要声明成属性或者全局变量,否则不会产生动画效果!

    #import "ICFCollisionViewController.h"

    @interface ICFCollisionViewController ()

    {

         UIImageView *dragonImageView;

        UIImageView*frogImageView;

    }

    @end

    @implementation ICFCollisionViewController

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    {

       self = [superinitWithNibName:nibNameOrNilbundle:nibBundleOrNil];

       if (self) {

           

        }

        return self;

    }

    - (void)viewDidLoad

    {

        [superviewDidLoad];    

       // 初始化力学动画生成器

        UIDynamicAnimator *animator = [[UIDynamicAnimatoralloc]initWithReferenceView:self.view];

        

       // 创建重力下落效果的对象

        UIGravityBehavior *gravityBehavior = [[UIGravityBehavioralloc]initWithItems:@[frogImageView,dragonImageView]];

        //设置重力加速度,水平和竖直方向

        [gravityBehavior setGravityDirection:CGVectorMake(0.0f, 0.3f)];

        

       // 创建碰撞效果的对象

        UICollisionBehavior* collisionBehavior = [[UICollisionBehavioralloc]initWithItems:@[frogImageView,dragonImageView]];

       // 物体的碰撞模式共有三种:UICollisionBehaviorModeItems(物体相互碰撞)  

                              UICollisionBehaviorModeBoundaries(物体不相互碰撞,只与边界碰撞)                            

                              UICollisionBehaviorModeEverything(既与物体碰撞又与边界碰撞)

        [collisionBehavior setCollisionMode:UICollisionBehaviorModeEverything]; 

       

        //此代码的作用是将self.view的边框作为碰撞边界,必须设置为YES,否则不会生成碰撞效果

        collisionBehavior.translatesReferenceBoundsIntoBoundary =YES;

        

        [animatoraddBehavior:gravityBehavior];

        [animatoraddBehavior:collisionBehavior];

        

        collisionBehavior.collisionDelegate =self;

    }

    -(void)collisionBehavior:(UICollisionBehavior *)behavior beganContactForItem:(id<UIDynamicItem>)item withBoundaryIdentifier:(id<NSCopying>)identifier atPoint:(CGPoint)p

    {   

        NSLog(@"开始碰撞时触发的方法");

    }

    -(void)collisionBehavior:(UICollisionBehavior *)behavior endedContactForItem:(id<UIDynamicItem>)item withBoundaryIdentifier:(id<NSCopying>)identifier

    {

        NSLog(@"结束碰撞时触发的方法");

    }

    @end

  • 相关阅读:
    区别@ControllerAdvice 和@RestControllerAdvice
    Cannot determine embedded database driver class for database type NONE
    使用HttpClient 发送 GET、POST、PUT、Delete请求及文件上传
    Markdown语法笔记
    Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
    Mysql 查看连接数,状态 最大并发数(赞)
    OncePerRequestFilter的作用
    java连接MySql数据库 zeroDateTimeBehavior
    Intellij IDEA 安装lombok及使用详解
    ps -ef |grep xxx 输出的具体含义
  • 原文地址:https://www.cnblogs.com/jgCho/p/6991541.html
Copyright © 2011-2022 走看看