UIKit力学行为包括了:重力(UIGravityBehavior),碰撞(UICollisionBehavior),吸附(UIAttachmentBehavior),推(UIPushBehavior),甩(UISnapBehavior)和行为限制(UIDynamicItemBehavior).

- (void)viewDidAppear:(BOOL)animated {

    [super viewDidAppear:animated];

    _animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
//重力行为
_gravity = [[UIGravityBehavior alloc] initWithItems:@[_box]];
[_animator addBehavior:_gravity];
//碰撞行为
_collision = [[UICollisionBehavior alloc]
initWithItems:@[_box]]; [_collision addBoundaryWithIdentifier:@"barrier" fromPoint:_barrier.frame.origin
toPoint:CGPointMake(_barrier.frame.origin.x + _barrier.frame.size.width, _barrier.frame.origin.y)]; _collision.translatesReferenceBoundsIntoBoundary = YES;
_collision.collisionDelegate = self; [_animator addBehavior:_collision];
UIDynamicItemBehavior* itemBehaviour = [[UIDynamicItemBehavior alloc] initWithItems:@[_box]];
itemBehaviour.elasticity = 0.5;
[_animator addBehavior:itemBehaviour]; } - (void)collisionBehavior:(UICollisionBehavior *)behavior beganContactForItem:(id<UIDynamicItem>)item withBoundaryIdentifier:(id<NSCopying>)identifier atPoint:(CGPoint)p {
if (!_firstContact)
{
_firstContact = YES;
//设置吸附行为
self.attach = [[UIAttachmentBehavior alloc] initWithItem:_attachmentPoint attachedToItem:_box];
[self.animator addBehavior:self.attach]; //设置推行为
UIPushBehavior* push = [[UIPushBehavior alloc] initWithItems:@[_box] mode:UIPushBehaviorModeInstantaneous];
// [push setAngle:-M_PI/4 magnitude:5.0f]; //右上角45度
CGVector pushDirection = {0.5, -0.5}; //setAngle: magnitude:替代方法
[push setPushDirection:pushDirection];
[push setMagnitude:5.0f];
[_animator addBehavior:push];
} }

另一个我个人认为比較实用,就是甩行为

- (void)viewDidAppear:(BOOL)animated {

    [super viewDidAppear:animated];

    _animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];

}

- (IBAction)handleSnapGesture:(UITapGestureRecognizer*)gesture
{
CGPoint point = [gesture locationInView:self.view]; // 移除甩行为
[_animator removeBehavior:_snap]; _snap = [[UISnapBehavior alloc] initWithItem:_box snapToPoint:point];
[self.animator addBehavior:_snap];
}

另一个就是类似桌面随手腕角度改变视图位移的方法

//设置山在X轴的偏移范围-50.0~50.0
UIInterpolatingMotionEffect *mountainEffectX;
mountainEffectX = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x"
type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
mountainEffectX.maximumRelativeValue = @50.0;
mountainEffectX.minimumRelativeValue = @-50.0;
[self.mountain addMotionEffect:mountainEffectX]; //设置树在X轴的偏移范围-100.0~100.0
UIInterpolatingMotionEffect *treeEffectX;
treeEffectX = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x"
type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
treeEffectX.maximumRelativeValue = @100.0;
treeEffectX.minimumRelativeValue = @-100.0;
[self.tree addMotionEffect:treeEffectX];

&lt;图形图像,动画,多媒体&gt; 读书笔记 --- 力学行为特性的更多相关文章

  1. &lt;图形图像,动画,多媒体&gt; 读书笔记 --- AirPlay

    AirPlay技术是之前一直没有接触过的技术,正好这次做一个笔记 共用: 1.能够通过AirPlay将iOS和MAC设备上的视频或音频输出到高清电视上或高保真音响 2.能够通过AirPlay将iOS和 ...

  2. &lt;图形图像,动画,多媒体&gt; 读书笔记 --- 音效

    音频多媒体文件主要是存放音频数据信息,音频文件在录制的过程中把声音信号,通过音频编码,变成音频数字信号保存到某种格式文件里.在播放过程中在对音频文件解码,解码出的信号通过扬声器等设备就能够转成音波.音 ...

  3. &lt;图形图像,动画,多媒体&gt; 读书笔记 --- 录制与编辑视频

    使用UIImagePickerController 进行录制 #import "ViewController.h" #import <MobileCoreServices/M ...

  4. iOS 图形图像动画 Core Animation

    //Core Animation #define WeakSelf __weak __typeof(self) weakSelf = self #define StrongSelf __strong ...

  5. 《Java并发编程实战》第九章 图形用户界面应用程序界面 读书笔记

    一.为什么GUI是单线程化 传统的GUI应用程序通常都是单线程的. 1. 在代码的各个位置都须要调用poll方法来获得输入事件(这样的方式将给代码带来极大的混乱) 2. 通过一个"主事件循环 ...

  6. 关东升的《iOS实战:图形图像、动画和多媒体卷(Swift版)》上市了

    关东升的<iOS实战:图形图像.动画和多媒体卷(Swift版)>上市了 承蒙广大读者的厚爱我的<iOS实战:图形图像.动画和多媒体卷(Swift版)>京东上市了,欢迎广大读者提 ...

  7. WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形

    原文:WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形 说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘> ...

  8. WPF,Silverlight与XAML读书笔记第四十三 - 多媒体支持之文本与文档

    说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘>的编排,对内容进行了总结并加入一些个人理解. Glyphs对象(WPF,Silverlig ...

  9. 《android开发艺术探索》读书笔记(七)--动画

    接上篇<android开发艺术探索>读书笔记(六)--Drawable No1: 自定义动画:派生一种新动画只需要继承Animation这个抽象类,然后重写它的initialize和app ...

随机推荐

  1. 移动端 (基于jquery的3个)touch插件

    //第一个 Author: Alone Antroduction: 高级前端开发工程师 Sign: 人生没有失败,只有没到的成功. //依赖jQuery 或者Zepto <script> ...

  2. HDU2451:Simple Addition Expression

    Problem Description A luxury yacht with 100 passengers on board is sailing on the sea in the twiligh ...

  3. c++ primer plus(文章6版本)中国版 编程练习答案第八章

    编程练习答案第八章 8.1写输出字符串的函数,存在默认参数表示输出频率,莫感觉1.(原标题太扯了,的问题的细微变化的基础上,含义) //8.1编写一个输出字符串的函数.有一个默认參数表示输出次数,默觉 ...

  4. IIS ASP.NET 版本转换批处理代码

    原文 IIS ASP.NET 版本转换批处理代码 用来转换asp.net版本的代码,需要的朋友可以参考下. 标识符的查看方法:iisaspnet.bat代码 复制代码代码如下: @echo off e ...

  5. C/C++基础笔试题1.1.2(十问解决方案运营商)

    他写在博客上不负责任,有人踩在上面,原因一点点失去了它. 其实纯常见问题.特别糟糕,由于鲍文看起来很大的优势就是想更直接看到的东西. 好了.返回整个标题. 1.你脑海中的运算符有哪些.按优先级排个序? ...

  6. 看德日进,凯文·凯利与Kurzweil老师?

    生命从哪里来.要到那里去.生命存在的意义是什么.这些差点儿是人类可以探究的最深层次问题.基督教给出的答案是毁灭和审判.佛学给出的答案是无常,科学的达尔文进化论给出了生命的起点和进化的过程,对于未来.达 ...

  7. IOS遍历未知对象属性、函数

    #import <objc/runtime.h> @implementation NSObject (PropertyListing) /* 获取对象的全部属性 */ - (NSDicti ...

  8. easyUI 插件写法 ---Validatebox 插件为例

    easyui 的每个组件都有属性.方法和事件.用户可以很容易地对这些组件进行扩展. js地址:jquery-easyui-1.3.3/jeasyui-extensions/jeasyui.extens ...

  9. MySQL定义和变量赋值

    变量可以在子程序(性能.存储过程.匿名块)声明和使用.这些变量的范围是在BEGIN...END规划. 变量的定义 语法格式: DECLARE var_name [, var_name]... data ...

  10. java Json字符串转List<Map>类型

    //相关包 import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonPa ...