IOS-UI-UIDynamic(二)
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(二)的更多相关文章
- 【HELLO WAKA】WAKA iOS客户端 之二 架构设计与实现篇
上一篇主要做了MAKA APP的需求分析,功能结构分解,架构分析,API分析,API数据结构分析. 这篇主要讲如何从零做iOS应用架构. 全系列 [HELLO WAKA]WAKA iOS客户端 之一 ...
- [IOS]IOS UI指南
[IOS]IOS UI指南 众所周知,IOS的界面设计,越来越流行,可以说都形成了一个标准,搜集了一些资料,供自己以后学习使用! iOS Human Interface Guidelines (中文翻 ...
- 微信连WiFi关注公众号流程更新 解决ios微信扫描二维码不关注就能上网的问题
前几天鼓捣了一下微信连WiFi功能,设置还蛮简单的,但ytkah发现如果是ios版微信扫描微信连WiFi生成的二维码不用关注公众号就可以直接上网了,而安卓版需要关注公众号才能上网,这样就少了很多ios ...
- XMPPFrameWork IOS 开发(二)- xcode配置
原始地址:XMPPFrameWork IOS 开发(二) 译文地址: Getting started using XMPPFramework on iOS 介绍 ios上的XMPPFramewor ...
- IOS UI 第八篇:基本UI
实现图片的滚动,并且自动停止在每张图片上 - (void)viewDidLoad{ [super viewDidLoad]; UIScrollView *scrollView = [[U ...
- 国外IOS UI指南
国外IOS UI指南 众所周知,IOS的界面设计,越来越流行,可以说都形成了一个标准,搜集了一些资料,供自己以后学习使用! iOS Human Interface Guidelines (中文翻译) ...
- iOS runtime探究(二): 从runtime開始深入理解OC消息转发机制
你要知道的runtime都在这里 转载请注明出处 http://blog.csdn.net/u014205968/article/details/67639289 本文主要解说runtime相关知识, ...
- iOS UI的几种模式
iOS UI的几种模式: 1.平凡模式(原生控件组合): 2.新闻模式: 3.播放器模式: 4.微博模式:
- 通过实现一个TableView来理解iOS UI编程
推荐一篇神作: 通过实现一个TableView来理解iOS UI编程 http://blog.jobbole.com/61101/
- UGUI的优点新UI系统二 直观、易于使用
UGUI的优点新UI系统二 直观.易于使用 对于UI控件,开发者可以直接使用鼠标在Scene视图里编辑它们的大小.位置和旋转角度,而无需编写任何代码,以Button为例,如图1-3.图1-4和图1 ...
随机推荐
- 写的非常好的文章 C#中的委托,匿名方法和Lambda表达式
简介 在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我想下面的代码能证实这点.下面哪一个First会被编译?哪一个会返回我们需要的结果?即Customer.ID=5.答案是6个Fir ...
- jquery.validate.js 应用示例
今天发现了jQuery一个很强大的验证表单插件(jquery.validate.js 下载地址:http://bassistance.de/jquery-plugins/jquery-plugin-v ...
- win10中android studio中的terminal不能输入
1 打开CMD窗口右击 2 3 重启电脑,你试试就知道了.
- HTTP 与 HTTPS 的区别
本文转自:http://www.cnblogs.com/ok-lanyan/archive/2012/07/14/2591204.html HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的 ...
- Young不等式的一个新证明
设 $p>0,q>0,a>0,b>0$ 且 $1/p+1/q=1$ 有 \[ab\leq \frac{a^{p}}{p}+\frac{b^{q}}{q}\] 证明:设 \[f( ...
- 强烈推荐android studio用的几个插件,androidstudio
不懂安装studio插件,看参考博文:android stuido插件安装:http://blog.csdn.net/liang5630/article/details/46372447 1.Butt ...
- iOS中添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效
ViewDidLoad中注册手势的部分代码如下: [cpp] view plaincopy UITapGestureRecognizer *oneTap = [[[UITapGestureRecogn ...
- 根据Android架构分层推荐开发书籍
Android系统的架构可以分为六个部分.笔者根据自己的体会为大家推荐每个部分对应的精品书籍,不喜勿喷. 1.Android Application <Android Developer Do ...
- cocos2d-x读取xml(适用于cocos2d-x 2.0以上版本号)
为了能在cocos2d-x的文本标签中显示中文,一个是转换文件编码格式,还有一种就是读取utf-8格式的xml文件.我选择了后者,其原因大家可以去搜索一下cocos2d-x显示中文,希望可以你给答案. ...
- jquery实现无缝滚动
//点击上一页 $('.pointLeft').click(function() { if (prevAllow) { prevAllow = false; scrollUlLeft = scroll ...