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

UIKit Dynamics

2016-12-08 16:18 381 查看

1.重力效果

UIImageView * lview =[[UIImageView alloc]initWithFrame:CGRectMake(20, 100, 40, 40)];
lview.image =[UIImage imageNamed:@"zc.jpg"];
[self.view addSubview:lview];

animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
UIGravityBehavior* gravityBeahvior = [[UIGravityBehavior alloc] initWithItems:@[lview]];
[gravityBeahvior setGravityDirection:CGVectorMake(0.0f, 0.5f)]; //property changed after printing of the book
[animator addBehavior:gravityBeahvior];


注意:UIDynamicAnimator要设置成成员变量才会有用(不知道为什么?)

2.碰撞效果

UIImageView * lview =[[UIImageView alloc]initWithFrame:CGRectMake(20, 120, 80, 80)];
lview.layer.cornerRadius =40;
lview.layer.masksToBounds =YES;
lview.image =[UIImage imageNamed:@"zc.jpg"];
[self.view addSubview:lview];

UIImageView * wview =[[UIImageView alloc]initWithFrame:CGRectMake(80, 70, 30, 30)];
wview.image =[UIImage imageNamed:@"zc.jpg"];
wview.layer.cornerRadius =15;
wview.layer.masksToBounds =YES;
[self.view addSubview:wview];

animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
UIGravityBehavior* gravityBeahvior = [[UIGravityBehavior alloc] initWithItems:@[lview,wview]];
[gravityBeahvior setGravityDirection:CGVectorMake(0.0f, 0.5f)];

UICollisionBehavior * collisionBehavior =[[UICollisionBehavior alloc]initWithItems:@[lview,wview]];
[collisionBehavior setCollisionMode: UICollisionBehaviorModeEverything];
collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;

[animator addBehavior:collisionBehavior];
[animator addBehavior:gravityBeahvior];


3.附着效果

UIImageView * lview =[[UIImageView alloc]initWithFrame:CGRectMake(20, 120, 80, 80)];
lview.layer.cornerRadius =40;
lview.layer.masksToBounds =YES;
lview.image =[UIImage imageNamed:@"zc.jpg"];
[self.view addSubview:lview];

UIImageView * wview =[[UIImageView alloc]initWithFrame:CGRectMake(80, 70, 30, 30)];
wview.image =[UIImage imageNamed:@"zc.jpg"];
wview.layer.cornerRadius =15;
wview.layer.masksToBounds =YES;
[self.view addSubview:wview];

animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
UIGravityBehavior* gravityBeahvior = [[UIGravityBehavior alloc] initWithItems:@[lview,wview]];
[gravityBeahvior setGravityDirection:CGVectorMake(0.0f, 0.5f)]; //property changed after printing of the book

UICollisionBehavior * collisionBehavior =[[UICollisionBehavior alloc]initWithItems:@[lview,wview]];
[collisionBehavior setCollisionMode: UICollisionBehaviorModeEverything];
collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;

CGPoint frogCenter = CGPointMake(260, 60);

UIAttachmentBehavior *attachmentBehavior = [[UIAttachmentBehavior alloc] initWithItem:lview attachedToAnchor:frogCenter];
[animator addBehavior:collisionBehavior];
[animator addBehavior:gravityBeahvior];
[animator addBehavior:attachmentBehavior];


注:frogCenter是中心点,initWithItem:lview attachedToAnchor:frogCenter:lview以frogCenter为中心点移动。

4.弹跳效果

UIImageView * lview =[[UIImageView alloc]initWithFrame:CGRectMake(180, 120, 80, 80)];
lview.layer.cornerRadius =40;
lview.layer.masksToBounds =YES;
lview.image =[UIImage imageNamed:@"zc.jpg"];
[self.view addSubview:lview];

UIImageView * wview =[[UIImageView alloc]initWithFrame:CGRectMake(80, 70, 30, 30)];
wview.image =[UIImage imageNamed:@"zc.jpg"];
wview.layer.cornerRadius =15;
wview.layer.masksToBounds =YES;
[self.view addSubview:wview];

animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
UIGravityBehavior* gravityBeahvior = [[UIGravityBehavior alloc] initWithItems:@[lview,wview]];
[gravityBeahvior setGravityDirection:CGVectorMake(0.0f, 0.5f)]; //property changed after printing of the book

UICollisionBehavior * collisionBehavior =[[UICollisionBehavior alloc]initWithItems:@[lview,wview]];
[collisionBehavior setCollisionMode: UICollisionBehaviorModeEverything];
collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;

CGPoint frogCenter = CGPointMake(lview.center.x, lview.center.y);

UIAttachmentBehavior *attachmentBehavior = [[UIAttachmentBehavior alloc] initWithItem:lview attachedToAnchor:frogCenter];
//设置振幅
[attachmentBehavior setFrequency:1.0f];
//校评动画峰值
[attachmentBehavior setDamping:0.1f];
[attachmentBehavior setLength:100.0f];

[animator addBehavior:collisionBehavior];
[animator addBehavior:gravityBeahvior];
[animator addBehavior:attachmentBehavior];


5.瞬间位移

lview =[[UIImageView alloc]initWithFrame:CGRectMake(180, 120, 80, 80)];
lview.layer.cornerRadius =40;
lview.layer.masksToBounds =YES;
lview.image =[UIImage imageNamed:@"zc.jpg"];
[self.view addSubview:lview];

UITapGestureRecognizer * gesture =[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleSnapGesture:)];
[self.view addGestureRecognizer:gesture];
}

-(IBAction)handleSnapGesture:(UITapGestureRecognizer*)gesture
{
CGPoint point = [gesture locationInView:self.view];
animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
UISnapBehavior* snapBehavior = [[UISnapBehavior alloc] initWithItem:lview snapToPoint:point];
snapBehavior.damping = 3.05f;
[animator addBehavior:snapBehavior];
}


注意:snapBehavior.damping = 3.05f; 数值越大,阻力越大。

6.推力效果

lview =[[UIImageView alloc]initWithFrame:CGRectMake(180, 120, 80, 80)];
lview.layer.cornerRadius =40;
lview.layer.masksToBounds =YES;
lview.image =[UIImage imageNamed:@"zc.jpg"];
[self.view addSubview:lview];

UITapGestureRecognizer * gesture =[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleSnapGesture:)];
[self.view addGestureRecognizer:gesture];

animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];

UICollisionBehavior* collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[lview]];
collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;
[animator addBehavior:collisionBehavior];

pushBehavior = [[UIPushBehavior alloc] initWithItems:@[lview] mode:UIPushBehaviorModeInstantaneous];
pushBehavior.angle = 0.0;
pushBehavior.magnitude = 0.0;

[animator addBehavior:pushBehavior];
}

-(IBAction)handleSnapGesture:(UITapGestureRecognizer*)gesture
{
CGPoint point = [gesture locationInView:self.view];
CGPoint origin = CGPointMake(CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds));
NSLog(@"%f",powf(point.x-origin.x, 2.0));

CGFloat distance = sqrtf(powf(point.x-origin.x, 2.0)+powf(point.y-origin.y, 2.0));
CGFloat angle = atan2(point.y-origin.y,point.x-origin.x);
distance = MIN(distance, 100.0);

//加速度
[pushBehavior setMagnitude:5];
//角度
[pushBehavior setAngle:angle];

[pushBehavior setActive:TRUE];
}


注意:powf(point.x-origin.x, 2.0):point.x-origin.x的平方

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