UIPushBehavior :推动效果 ,UISnapBehavior:迅速移动效果,UIAttachmentBehavior:附着效果
2015-10-05 17:45
465 查看
// 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; //推动角度 // A continuous force vector with a magnitude of 1.0, applied to a 100 point x 100 point view whose density value is 1.0, results in view acceleration of 100 points per s^2 @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) typedef NS_ENUM(NSInteger, UIAttachmentBehaviorType) { UIAttachmentBehaviorTypeItems, //吸附一个元素 UIAttachmentBehaviorTypeAnchor //吸附一个点 } NS_ENUM_AVAILABLE_IOS(7_0); //设置吸附效果的样式 @property (readonly, nonatomic) UIAttachmentBehaviorType attachedBehaviorType;
//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 幅度
首先定义要使用的两个视图和容器为全局变量
UIDynamicAnimator *dynamicAnimator; UIView *view1; UIView *view2;
初始化视图 和UIDynamicAnimator
dynamicAnimator = [[UIDynamicAnimator alloc]initWithReferenceView:self.view]; view1 = [[UIView alloc]initWithFrame:CGRectMake(50, 50, 100, 100)]; view1.backgroundColor = [UIColor orangeColor]; [self.view addSubview:view1]; view2 = [[UIView alloc]initWithFrame:CGRectMake(150, 50, 100, 100)]; view2.backgroundColor = [UIColor grayColor]; [self.view addSubview:view2]; //添加一个手势来触发方法 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(pushView)]; [view1 addGestureRecognizer:tap]; // // UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(snap:)]; // [self.view addGestureRecognizer:tap]; // UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(attachment:)]; // [self.view addGestureRecognizer:tap];
推动效果
- (void)pushView { // 先把容器里面的效果移除 [dynamicAnimator removeAllBehaviors]; // 初始化一个推动效果 //initWithItems后面添加的是一个 数组 UIPushBehavior *push = [[UIPushBehavior alloc]initWithItems:@[view1] mode:UIPushBehaviorModeContinuous]; // 设置推的方向 // x正右负左 y正下 负上 push.pushDirection = CGVectorMake(1, 0); push.magnitude=1; //添加到效果器里面 [dynamicAnimator addBehavior:push]; }
吸附效果
-(void)attachment:(UITapGestureRecognizer *)sender { //同样先移除里面的效果 [dynamicAnimator removeAllBehaviors]; //初始化吸附效果 //initWithItem这里注意 后面加的是一个视图,而不是数组 //initWithItems后面加的才是数组,这里多了个 s UIAttachmentBehavior *attachment = [[UIAttachmentBehavior alloc]initWithItem:view1 offsetFromCenter:UIOffsetMake(20, 20) attachedToAnchor:[sender locationInView:self.view]]; attachment.length = 10; attachment.damping = 0.1; attachment.frequency = 6; [dynamicAnimator addBehavior:attachment]; UIAttachmentBehavior *attachment2 = [[UIAttachmentBehavior alloc]initWithItem:view1 offsetFromCenter:UIOffsetMake(50, 50) attachedToItem:view2 offsetFromCenter:UIOffsetMake(50, 50)]; attachment2.length = 10; attachment2.damping = 0.1; attachment2.frequency = 6; [dynamicAnimator addBehavior:attachment2]; }
迅速移动效果
- (void)snap:(UITapGestureRecognizer *)sender { [dynamicAnimator removeAllBehaviors]; // 迅速移动效果 只能一次 添加到一个元素上 snapToPoint让它移动到哪一个点、 UISnapBehavior *snap = [[UISnapBehavior alloc]initWithItem:view1 snapToPoint:[sender locationInView:self.view]]; snap.damping = 0.1; [dynamicAnimator addBehavior:snap]; }
相关文章推荐
- [AndroidUI]使用DrawerLayout实现侧滑菜单
- UITableView的使用
- HDU 5496 Beauty of Sequence
- iOS的UDID废用以及UUID配合keychain的替换方案实现
- 使用Xcode 时候程序莫名其妙Build不过去的可能原因
- Android UI SurfaceView的使用-绘制组合图型,并使其移动
- Android UI SurfaceView的使用-绘制组合图型,并使其移动
- 改变UITableView的headerView、footerView背景颜色
- Android UI SurfaceView的使用-绘制单个图型或多个图形
- UITextField
- Android UI SurfaceView的使用-绘制单个图型或多个图形
- require的定义看不懂【2】
- UITableViewCell中设置不同图片尺寸相同以及设置图片为圆形的方法
- ./configure -build,-host,-target设置
- hdu 1005 -- Number Sequence
- Java多线程15:Queue、BlockingQueue以及利用BlockingQueue实现生产者/消费者模型
- UITapGestureRecognizer 的用法
- UNIX环境高级编程中的apue.h头文件的问题
- UI_三个UITableView的省市区联动
- UITableView