您的位置:首页 > 产品设计 > UI/UE

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: