UIPushBehavior :推动效果

UIAttachmentBehavior:附着效果

UISnapBehavior:迅速移动效果

一.重要的属性

UIPushBehavior :推动效果

typedef NS_ENUM(NSInteger, UIPushBehaviorMode) {

UIPushBehaviorModeContinuous, 持续的力

UIPushBehaviorModeInstantaneous 瞬间的力

} NS_ENUM_AVAILABLE_IOS(7_0);

@property (nonatomic, readonly) UIPushBehaviorMode mode; 推动效果的样式

@property (nonatomic, readwrite) BOOL active; 是否激活

@property (readwrite, nonatomic) CGFloat angle; 推动角度

@property (readwrite, nonatomic) CGFloat magnitude; 推动力量

@property (readwrite, nonatomic) CGVector pushDirection; 推动的方向

UISnapBehavior:迅速移动效果

// The point argument is expressed in the reference coordinate system

- (instancetype)initWithItem:(id <UIDynamicItem>)item snapToPoint:(CGPoint)point;

迅速移动效果 只能一次 添加到一个元素上  snapToPoint 让他移动到哪一个点

@property (nonatomic, assign) CGFloat damping; // damping value from 0.0 to 1.0. 0.0 is the least oscillation. damping 的范围是(0.0-1.0)

UIAttachmentBehavior:附着效果

吸附着一个视图 或者一个点  (也可以多个连接)

附着效果 一个视图与一个锚点或者另一个视图相连接的情况

附着行为描述的是两点之间的连接情况,可以模拟刚性或者弹性连接

在多个物体间设定多个UIAttachmentBehavior,可以模拟多物体连接

typedef NS_ENUM(NSInteger, UIAttachmentBehaviorType) {

UIAttachmentBehaviorTypeItems, 吸附一个元素

UIAttachmentBehaviorTypeAnchor 吸附一个点

} NS_ENUM_AVAILABLE_IOS(7_0);

设置吸附效果的样式

@property (readonly, nonatomic) UIAttachmentBehaviorType attachedBehaviorType;

@property (readwrite, nonatomic) CGPoint anchorPoint;锚点

@property (readwrite, nonatomic) CGFloat length;距离 与锚点的距离

@property (readwrite, nonatomic) CGFloat damping; // 1: critical damping  跳跃度

@property (readwrite, nonatomic) CGFloat frequency; // in Hertz   幅度

二.代码

1.推动效果

 #import "ViewController.h"

 @interface ViewController ()
{
UIDynamicAnimator * dynamicAnimator;
UIView *view1; }
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
dynamicAnimator = [[UIDynamicAnimator alloc]initWithReferenceView:self.view];
view1 = [[UIView alloc]initWithFrame:CGRectMake(, , , )];
view1.backgroundColor = [UIColor redColor];
[self.view addSubview:view1];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(pushView)]; [view1 addGestureRecognizer:tap];
- (void)pushView{
[dynamicAnimator removeAllBehaviors];//移除所有的效果
UIPushBehavior * push = [[UIPushBehavior alloc]initWithItems:@[view1] mode:UIPushBehaviorModeContinuous];
// mode的两个属性
// UIPushBehaviorModeContinuous,一直推动
// UIPushBehaviorModeInstantaneous 瞬间推动
push.pushDirection = CGVectorMake(, );
// x是正右,负左。y是正下负上。
push.magnitude = ;//量级:既是推动力大小
//设置成NO时就不再响应效果
// push.active = NO;
[dynamicAnimator addBehavior:push];//把推动效果添加到效果器上
}

2.瞬间移动效果(viewDidLoad里面添加另一个点击手势)

 UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(snap:)];

    [self.view addGestureRecognizer:tap1];

之后

-(void)snap:(UITapGestureRecognizer *)send{
[dynamicAnimator removeAllBehaviors];
// 迅速移动效果 只能一次 添加到一个元素上 snapToPoint 让他移动到哪一个点
UISnapBehavior * snap = [[UISnapBehavior alloc]initWithItem:view1 snapToPoint:[send locationInView:self.view]];
//跳动幅度:0~1,值越小,跳动幅度越大
snap.damping = ;
[dynamicAnimator addBehavior:snap]; }

吸附效果

@interface ViewController ()
{
UIDynamicAnimator * dynamicAnimator;
UIView *view1;
UIView *view2;
}
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
dynamicAnimator = [[UIDynamicAnimator alloc]initWithReferenceView:self.view];
view1 = [[UIView alloc]initWithFrame:CGRectMake(, , , )];
view1.backgroundColor = [UIColor redColor]; [self.view addSubview:view1]; view2 = [[UIView alloc]initWithFrame:CGRectMake(, , , )];
view2.backgroundColor = [UIColor blueColor];
[self.view addSubview:view2]; UITapGestureRecognizer *tap2 = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(attachment:)]; [self.view addGestureRecognizer:tap2]; }
-(void)attachment:(UITapGestureRecognizer *)send{
[dynamicAnimator removeAllBehaviors];
// 吸附到视图的某个点
UIAttachmentBehavior * attachment = [[UIAttachmentBehavior alloc]initWithItem:view1 offsetFromCenter:UIOffsetMake(, ) attachedToAnchor:[send locationInView:self.view]];
attachment.length = ;//吸附范围
attachment.damping = 0.5;
attachment.frequency = ;
[dynamicAnimator addBehavior:attachment];
// 两个元素吸附
// UIAttachmentBehavior *attachment1 = [[UIAttachmentBehavior alloc]initWithItem:view1 offsetFromCenter:UIOffsetMake(50, 50) attachedToItem:view2 offsetFromCenter:UIOffsetMake(50, 50)];
// attachment1.length = 50;//吸附范围
// attachment1.damping = 0.5;
// attachment1.frequency = 50;
// [dynamicAnimator addBehavior:attachment1]; }

另外,在iOS9之前这些效果只支持矩形。IOS9之后增加了新的属性UIDynamicItemCollisionBoundsType;因为本人的Xcode没升级,没法使用。

IOS-UI-UIDynamic(二)的更多相关文章

  1. 【HELLO WAKA】WAKA iOS客户端 之二 架构设计与实现篇

    上一篇主要做了MAKA APP的需求分析,功能结构分解,架构分析,API分析,API数据结构分析. 这篇主要讲如何从零做iOS应用架构. 全系列 [HELLO WAKA]WAKA iOS客户端 之一 ...

  2. [IOS]IOS UI指南

    [IOS]IOS UI指南 众所周知,IOS的界面设计,越来越流行,可以说都形成了一个标准,搜集了一些资料,供自己以后学习使用! iOS Human Interface Guidelines (中文翻 ...

  3. 微信连WiFi关注公众号流程更新 解决ios微信扫描二维码不关注就能上网的问题

    前几天鼓捣了一下微信连WiFi功能,设置还蛮简单的,但ytkah发现如果是ios版微信扫描微信连WiFi生成的二维码不用关注公众号就可以直接上网了,而安卓版需要关注公众号才能上网,这样就少了很多ios ...

  4. XMPPFrameWork IOS 开发(二)- xcode配置

    原始地址:XMPPFrameWork IOS 开发(二) 译文地址:   Getting started using XMPPFramework on iOS 介绍 ios上的XMPPFramewor ...

  5. IOS UI 第八篇:基本UI

    实现图片的滚动,并且自动停止在每张图片上     - (void)viewDidLoad{    [super viewDidLoad]; UIScrollView *scrollView = [[U ...

  6. 国外IOS UI指南

    国外IOS UI指南 众所周知,IOS的界面设计,越来越流行,可以说都形成了一个标准,搜集了一些资料,供自己以后学习使用! iOS Human Interface Guidelines (中文翻译) ...

  7. iOS runtime探究(二): 从runtime開始深入理解OC消息转发机制

    你要知道的runtime都在这里 转载请注明出处 http://blog.csdn.net/u014205968/article/details/67639289 本文主要解说runtime相关知识, ...

  8. iOS UI的几种模式

    iOS UI的几种模式: 1.平凡模式(原生控件组合): 2.新闻模式: 3.播放器模式: 4.微博模式:

  9. 通过实现一个TableView来理解iOS UI编程

    推荐一篇神作: 通过实现一个TableView来理解iOS UI编程 http://blog.jobbole.com/61101/

  10. UGUI的优点新UI系统二 直观、易于使用

    UGUI的优点新UI系统二 直观.易于使用   对于UI控件,开发者可以直接使用鼠标在Scene视图里编辑它们的大小.位置和旋转角度,而无需编写任何代码,以Button为例,如图1-3.图1-4和图1 ...

随机推荐

  1. 常用 Unicode 符号列表

    Unicode 中包含了各种符号,我们可以作为图标来使用.这里整理一下常用的一些符号. 一.拉丁字母补全(Latin-1 Supplement):U+0080 至 U+00FF Unicode 编号 ...

  2. iOS 关闭自动锁屏

    [UIApplication sharedApplication].idleTimerDisabled=YES;// 不自动锁屏 [UIApplication sharedApplication].i ...

  3. linux IO诊断命令集

    IO.sh ##iostat是查看磁盘活动统计情况 ##显示全部设备负载情况 r/s: 每秒完毕的读 I/O 设备次数.即 rio/s:w/s: 每秒完毕的写 I/O 设备次数.即 wio/s等 io ...

  4. Cocos2d-x 3.0心得(01)-图片载入与混合模式

    近期開始用cocos2dx 3.0做东西,略有心(cao)得(dian),略微作下记录吧. v3.0相对v2.2来说,最引人注意的,应该是对触摸层级的优化.和lambda回调函数的引入(嗯嗯.不枉我改 ...

  5. JS保留两位小数 四舍五入函数

    js 四舍五入函数 toFixed(),里面的参数 就是保留小数的位数. <script language="javascript"> document.write(& ...

  6. Getting Started With Python Internals

    http://akaptur.com/blog/2014/08/03/getting-started-with-python-internals/

  7. careercup-中等难题

    17.1 编写一个函数,不用临时变量,直接交换两函数. 解法: 方法一:这个是经典面试题,也相当直接.我们将用a0表示a的初值,b0表示b的初始值,用diff表示a0-b0的值. 让我们将a>b ...

  8. 命令行一键清除IE记录

    清除Internet临时文件 RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8 清除Cookies RunDll32.exe InetCpl.cpl, ...

  9. xss脚本攻击

    xss脚本攻击不仅仅只是alert(1)就算完了,xss脚本攻击真正的用处是盗取普通用户的cookie,或者盗取管理员的cookie. xss分类(类型): 1. 反射型xss2. 存储型xss3. ...

  10. Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件

    Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...