美文网首页
UIDynamic动画(swift)

UIDynamic动画(swift)

作者: 一念之见 | 来源:发表于2015-08-21 18:47 被阅读276次
  • 本文简单介绍了UIDynamic的以下三种物理仿真行为
  • UIGravityBehavior:重力行为
  • UICollisionBehavior:碰撞行为
  • UISnapBehavior:捕捉行为

认识UIDynamic

UIDynamics是从iOS 7开始引入的一种新技术,隶属于UIKit框架的物理引擎。能模拟和仿真现实生活中的物理现象它可以让我们在程序中对界面元素添加一些行为从而达到诸如重力、碰撞等现实中的物理行为。

物理仿真元素

物理仿真元素,也就是执行仿真行为的载体。这里要注意的是,并 不是任何对象都能做物理仿真元素,只有遵守了UIDynamicItem协议的对象才能充当物理仿真元素

UIView默认已经遵守了UIDynamicItem协议,因此任何UIView类型的控件都能实现物理仿真

代码实现

  • 创建行为的方法
 /**
    为控件添加重力行为
    
    :param: aimView 目标控件
    */
    func addGravityBehaviorInView(aimView : UIView) {
    
        // 1.创建重力行为,并且指定仿真元素
        var gravity = UIGravityBehavior();
        gravity .addItem(aimView);
        
        // 设置重力的方向(默认角度M_PI_2)
        gravity.angle = 0;
        
        // 设置重力的大小
        gravity.magnitude = 10.0;
        
        // 设置重力的向量值
        gravity.gravityDirection = CGVectorMake(0, 1.0);
        
        //2.将重力行为添加到仿真器中
        animator .addBehavior(gravity);
    }

 /**
    添加碰撞行为
    
    :param: aimView    目标控件
    :param: bezierPath 边界
    */
    func addCollisionBehaviorInView(aimView: UIView, withBoundary bezierPath: UIBezierPath) {
        //1.创建碰撞行为
        var collision = UICollisionBehavior(items: [aimView]);
        
        //2.设置边界
        collision .addBoundaryWithIdentifier("bezierPath", forPath: bezierPath);
        
        //3.将碰撞行为添加到仿真器中
        animator.addBehavior(collision);
    }

/**
    添加捕捉行为
    
    :param: 仿真元素
    :param: point   捕捉点
    */
    func addCaptureBehaviorInView(aimView: UIView ,withPoint point: CGPoint) {
        //1.创建捕捉行为
        var snap = UISnapBehavior(item: aimView, snapToPoint: point);
        
        //设置参数
        snap.damping = 1;  //阻力系数(0~1)
        
        // 2. 添加到仿真器中
        animator.addBehavior(snap);
    }

点击rockfall按钮在试图内创建一个橙色控件,并同时为控件添加重力和碰撞行为 (这里碰撞行为依赖于重力所提供的动力)

  • 注意:只有给碰撞行为设置了边界且仿真元素与边界接触才会产生碰撞
 @IBAction func rockfall(sender: UIButton) {

        let subView = UIView(frame: CGRectMake(10, 20, 40, 40));
        subView.backgroundColor = UIColor.orangeColor();
        view .addSubview(subView);
        
        animator .removeAllBehaviors();
        //重力
        self.addGravityBehaviorInView(subView);
        
        //碰撞
        var bezierPath = UIBezierPath(rect: CGRectMake(0, 0, view.bounds.size.width, view.bounds.size.width));
        self.addCollisionBehaviorInView(subView, withBoundary: bezierPath);
    }

效果图如下:


点击控制器,为棕色控件添加捕捉效果,捕捉点为当前触摸点

   override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
        //移除之前的行为
        animator.removeAllBehaviors();
        //获取屏幕点击点
        let touchP = (touches as NSSet).anyObject()?.locationInView(view);
        //添加捕捉行为
        self .addCaptureBehaviorInView(rect, withPoint: touchP!);
    }

效果图如下:


最后附上github地址:https://github.com/laichunhui/UIDynamic

相关文章

  • UIDynamic动画(swift)

    本文简单介绍了UIDynamic的以下三种物理仿真行为 UIGravityBehavior:重力行为 UIColl...

  • UIDynamic动画

    基础知识 UIDynamic是物理仿真动画,使用前先了解三个类:物理仿真元素(Dynamic Item):要执行动...

  • iOS动画三板斧(三)--UIDynamic动画

    终于到了动画三板斧第三篇了,这里用UIDynamic来实现动画。UIDynamic是iOS 7之后新添加的一些物理...

  • Swift3.0 UIDynamic仿真器,物理引擎

    在OC上使用UIDynamic和Swift3.0 差不多一样的方法,可能UIDynamic已经够简洁,但是要写出棒...

  • UIDynamic

    简介 UIDynamic是iOS 7之后新添加的一些物理仿真动画库,包含在UIKit框架中。 UIDynamic中...

  • UIDynamic动画(很好玩)

    最近公司的项目有点紧,这段时间抽时间整理下关于UIDynamic的思路,现在将牛顿摆锤动画做一个简单的实现. 根据...

  • UIDynamic动画效果总结

    UIDynamicAnimator 可以通过该类添加不同的行为,来实现一些动态效果。 初始化方法 添加到anima...

  • iOS开发拓展篇—UIDynamic(简单介绍)

    iOS开发拓展篇—UIDynamic(简单介绍) 一、简单介绍 1.什么是UIDynamic UIDynamic是...

  • UIDynamic

    UIDynamic 中的三个重要概念 •Dynamic Animator:动画者,为动力学元素提供物理学相关的能力...

  • 5.1 iOS UIDynamic

    1.1UIDynamic概述 UIKit动力学(Dynamic)最大的特点是将现实世界中动力驱动的动画引入了UIK...

网友评论

      本文标题:UIDynamic动画(swift)

      本文链接:https://www.haomeiwen.com/subject/tzpgqttx.html