`
dcj3sjt126com
  • 浏览: 1878758 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

 

 

一、简单介绍

 

1.什么是UIDynamic

 

UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架

 

可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象

 

如:重力、弹性碰撞等现象

 

 

 

2.物理引擎的价值

 

广泛用于游戏开发,经典成功案例是愤怒的小鸟

 

让开发人员可以在远离物理学公式的情况下,实现炫酷的物理仿真效果

 

提高了游戏开发效率,产生更多优秀好玩的物理仿真游戏

 

 

 

3.知名的2D物理引擎

 

Box2d

 

Chipmunk

 

 

 

二、使用步骤

 

要想使用UIDynamic来实现物理仿真效果,大致的步骤如下

 

1)创建一个物理仿真器(顺便设置仿真范围)

 

2)创建相应的物理仿真行为(顺便添加物理仿真元素)

 

3)将物理仿真行为添加到物理仿真器中开始仿真

 

 

 

三、相关说明

 

1.三个概念

 

1)谁要进行物理仿真?

 

  物理仿真元素(Dynamic Item

 

 

 

2)执行怎样的物理仿真效果?怎样的动画效果?

 

  物理仿真行为(Dynamic Behavior

 

 

 

3)让物理仿真元素执行具体的物理仿真行为

 

  物理仿真器(Dynamic Animator

 

 

 

2.物理仿真元素

 

注意:

 

不是任何对象都能做物理仿真元素

 

不是任何对象都能进行物理仿真

 

 

 

物理仿真元素要素:

 

任何遵守了UIDynamicItem协议的对象

 

UIView默认已经遵守了UIDynamicItem协议,因此任何UI控件都能做物理仿真

 

UICollectionViewLayoutAttributes类默认也遵守UIDynamicItem协议

 

 

 

3.物理仿真行为

 

1UIDynamic提供了以下几种物理仿真行为

 

UIGravityBehavior:重力行为

 

UICollisionBehavior:碰撞行为

 

UISnapBehavior:捕捉行为

 

UIPushBehavior:推动行为

 

UIAttachmentBehavior:附着行为

 

UIDynamicItemBehavior:动力元素行为

 

 

 

2)物理仿真行为须知

 

上述所有物理仿真行为都继承自UIDynamicBehavior

 

所有的UIDynamicBehavior都可以独立进行

 

组合使用多种行为时,可以实现一些比较复杂的效果

 

 

 

 

 

4.物理仿真器

 

1)物理仿真器须知

 

它可以让物理仿真元素执行物理仿真行为

 

它是UIDynamicAnimator类型的对象

 

 

 

2UIDynamicAnimator的初始化

 

- (instancetype)initWithReferenceView:(UIView *)view;

 

view参数:是一个参照视图,表示物理仿真的范围

 

 

 

5.物理仿真器的说明

 

1UIDynamicAnimator的常见方法

 

  - (void)addBehavior:(UIDynamicBehavior *)behavior;    //添加1个物理仿真行为

 

  - (void)removeBehavior:(UIDynamicBehavior *)behavior;  //移除1个物理仿真行为

 

  - (void)removeAllBehaviors;    //移除之前添加过的所有物理仿真行为

 

 

 

2UIDynamicAnimator的常见属性

 

  @property (nonatomic, readonly) UIView* referenceView;  //参照视图

 

  @property (nonatomic, readonly, copy) NSArray* behaviors;//添加到物理仿真器中的所有物理仿真行为

 

  @property (nonatomic, readonly, getter = isRunning) BOOL running;//是否正在进行物理仿真

 

  @property (nonatomic, assign) id <UIDynamicAnimatorDelegate> delegate;//代理对象(能监听物理仿真器的仿真过程,比如开始和结束)

 

如何使用swift写UIDynamic

import UIKit

class FirstViewController: UIViewController,UICollisionBehaviorDelegate {
    var animator = UIDynamicAnimator()
    var gravity = UIGravityBehavior()
    var collision = UICollisionBehavior()
    var firstContact = false

    override func viewDidLoad() {
        super.viewDidLoad()

        let square = UIView(frame: CGRectMake(100, 100, 100, 100))
        square.backgroundColor = UIColor.grayColor()
        view.addSubview(square)

        animator = UIDynamicAnimator(referenceView: view)
        gravity = UIGravityBehavior(items: [square])
        animator.addBehavior(gravity)

        let barrier = UIView(frame: CGRectMake(0, 300, 130, 20))
        barrier.backgroundColor = UIColor.redColor()
        view.addSubview(barrier)

        collision = UICollisionBehavior(items: [square])
        collision.translatesReferenceBoundsIntoBoundary = true
        animator.addBehavior(collision)

        //添加一个碰撞体
        let rightEdge = CGPointMake(barrier.frame.origin.x + barrier.frame.size.width, barrier.frame.origin.y)
        collision.addBoundaryWithIdentifier("barrier", fromPoint: barrier.frame.origin, toPoint: rightEdge)

        collision.action = {
            println("(NSStringFromCGAffineTransform(square.transform)),(NSStringFromCGPoint(square.center))") //只要动就会触发,可以获得动的物体的位置
        }
        collision.collisionDelegate = self

        let itemBehaviour = UIDynamicItemBehavior(items: [square])
        itemBehaviour.elasticity = 0.6 //更改弹性
        animator.addBehavior(itemBehaviour)
    }

    func collisionBehavior(behavior: UICollisionBehavior, beganContactForItem item: UIDynamicItem, withBoundaryIdentifier identifier: NSCopying, atPoint p: CGPoint) {
        println("began contact") //碰撞时触发
        //每次碰撞都会变黄一下,然后又转成灰色
        let view = item as UIView
        view.backgroundColor = UIColor.yellowColor()
        UIView.animateWithDuration(0.3, animations: {
            view.backgroundColor = UIColor.grayColor()
        })

        //检测第一次碰撞,动态添加behaviors
        if !firstContact {
            firstContact = true
            //处理第一次碰撞的地方
        }

    }

 

分享到:
评论

相关推荐

    iOS开发中使用UIDynamic来捕捉动画组件的重力行为

    在iOS开发中,UIDynamic是苹果为开发者提供的一套强大的框架,从iOS 7开始引入,主要用于模拟现实世界中的物理现象,如重力、碰撞、弹性等。它使得开发者能够轻松地为应用添加动态和交互性的用户体验,而无需深入...

    iOS开发进阶篇-成为一个iOS开发高手

    "iOS开发进阶篇-成为一个iOS开发高手"这份资料正为此目标提供了全面的指导。它深入探讨了iOS开发的核心概念和技术,旨在帮助开发者们从初级水平提升到高级专家水平。 首先,这份资料可能涵盖了Swift编程语言的高级...

    IOS开发环境搭建和简单实例

    本文将详细介绍如何搭建iOS开发环境,并提供一些简单的开发实例来帮助初学者快速入门。 ### iOS开发环境搭建 #### 注册Apple ID 为了下载开发所需的软件和工具,首先需要注册一个Apple ID。Apple ID是Apple服务的...

    iOS开发进阶篇-成为iOS开发高手-源码

    这个源码包“iOS开发进阶篇-成为iOS开发高手”提供了丰富的学习材料,旨在帮助你深入理解iOS开发的核心概念和技术。以下将对这个资源包中的关键知识点进行详细阐述: 1. **Objective-C与Swift的比较**: - ...

    iOS 开发范例实战宝典(进阶篇)

    "iOS开发范例实战宝典(进阶篇)"聚焦于实际应用中的各种技术,旨在帮助开发者掌握更高级的iOS开发技巧。这本书深入探讨了图形图像处理、数据可视化、网络交互、媒体播放、地理位置服务以及设备传感器的应用。以下是...

    iOS开发进阶-唐巧.pdf

    第一部分介绍iOS 开发的常用工具,第二部分介绍iOS开发中的一些常见的实践经验,第三部分介绍iOS 开发中涉及的原理。 如果把成为iOS 开发高手的过程比作武侠小说中的修炼过程的话,工具、实践和理论的学习就分别对应...

    iOS开发进阶-完整版

    通过以上这些知识点的介绍,《iOS开发进阶》这本书旨在帮助初级开发者快速掌握iOS应用程序开发的核心技术和最佳实践,并能够通过实战项目进一步提升自己的技术水平。无论是对于想要深入了解iOS开发细节的专业人士...

    IOS开发指南(第5版) pdf下载地址

    《iOS开发指南(第5版)》是一本深入探讨iOS应用程序开发的专业书籍,旨在帮助开发者从零基础到熟练掌握Apple的移动操作系统上的应用构建过程。该书第五版更新了最新的开发技术和工具,确保读者能够使用最新的Xcode和...

    《iOS开发零基础入门教程》(40集)

    资源名称:《iOS开发零基础入门教程》(40集)资源目录:【】传智播客《iOS开发零基础入门教程》1.1【】传智播客《iOS开发零基础入门教程》1.2【】传智播客《iOS开发零基础入门教程》1.3【】传智播客《iOS开发零基础...

    iOS开发视频教程

    资源名称:iOS开发视频教程资源目录:【】iOS开发视频教程-第01讲-iOS历史介绍【】iOS开发视频教程-第02讲-XCode安装【】iOS开发视频教程-第03讲-UIView_PPT【】iOS开发视频教程-第04讲-UILabel【】iOS开发视频教程-...

    精通IOS开发 第7版 归档文件

    《精通iOS开发 第7版》是一本深入探讨iOS应用程序开发的专业书籍,其归档文件包含了丰富的源代码和资源文件,旨在帮助开发者深入了解并熟练掌握iOS平台的开发技术。这一版本聚焦于最新的iOS版本,提供了全面的更新和...

    Xamarin iOS开发实战中册

    《Xamarin iOS开发实战中册》是一本专为开发者准备的深入学习Xamarin技术,特别是针对iOS平台的应用开发指南。这本书旨在帮助读者掌握使用Xamarin工具集构建原生iOS应用程序的技能,从而实现跨平台的高效开发。...

    IOS官方开发手册

    《iOS官方开发手册》是苹果公司为iOS应用开发者提供的权威指南,它涵盖了从入门到精通的所有关键知识点。作为iOS开发的基石,这份手册是每个开发者不可或缺的参考资料。下面,我们将详细探讨其中的主要内容。 首先...

    《iOS开发项目化入门教程》源代码

    《iOS开发项目化入门教程》源代码是一份针对初学者的宝贵资源,旨在通过实际项目的实践,帮助开发者快速掌握iOS应用程序开发的基础技能。这个压缩包包含了一系列与iOS开发相关的源代码文件,这些文件反映了iOS应用从...

    IOS开发

    下面将从环境需求、环境搭建、开发语言三个方面对 iOS 开发进行详细介绍。 一、环境需求 iOS 开发需要 Mac 系统支持,通常使用的两种版本的 Mac 系统是:雪豹(MacOS X Snow Leopard)和狮子系统(Mac OSX Lion)...

    精通iOS开发源码地址

    精通iOS开发源码下载地址,这个本书简直太棒了,是我买过的性价比最高的一本书。

    XE6\XE7移动开发环境搭建之IOS篇

    XE6 & IOS开发之开发者账号、苹果证书(3):关于在XE6中使用苹果证书的简单介绍 306 XE7 & IOS开发之开发账号(1):开发证书、AppID、设备、开发授权profile的申请使用,附Debug真机调试演示(XCode所有版本通用,...

    最好的ios开发书籍

    总的来说,《最好的iOS 5开发新手教程》是一本全面覆盖iOS开发基础的书籍,无论是对Swift语法的解析,还是对UIKit和相关服务的介绍,都为初学者提供了一个良好的学习路径。通过系统阅读并实践书中的内容,开发者可以...

Global site tag (gtag.js) - Google Analytics