UIPushBehavior :推动效果 ,UISnapBehavior:迅速移动效果,UIAttachmentBehavior:附着效果

// 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];


}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ldl_csdn_ios

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值