本文主要是介绍UIDynamic,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一,重力行为
// 1.创建物理仿真器
// 并且指定了当前控制器的view作为仿真范围
// UIDynamicAnimator *anim = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
// 2.创建物理仿真行为
注:以上代码需要写成全局变量,如下:
- (UIDynamicAnimator *)anim{
if (!_anim) {
_anim = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
}
return _anim;
}
// 并且指定红色为作为仿真元素
UIGravityBehavior *gravityB = [[UIGravityBehavior alloc] initWithItems:@[self.redView]];
// 设置重力的方向
// gravityB.gravityDirection = CGVectorMake(1, 0);
// gravityB.gravityDirection = CGVectorMake(0, -1);
// gravityB.gravityDirection = CGVectorMake(1, 1);
// 设置重力的角度
// gravityB.angle = M_PI_2;
// 设置重力的加速度
gravityB.magnitude = 100.0;
// 3.将物理仿真行为添加到仿真器中
[self.anim addBehavior:gravityB];
}
二,碰撞
// 碰撞
// 1.创建物理仿真器
// 2.创建物理仿真行为
UIGravityBehavior *gravigtyB = [[UIGravityBehavior alloc] initWithItems:@[self.redView]];
// gravigtyB.magnitude = 100;
// 创建碰撞仿真行为
UICollisionBehavior *collisionB = [[UICollisionBehavior alloc] initWithItems:@[self.redView, self.st]];
// 设置碰撞的边界
// collisionB.translatesReferenceBoundsIntoBoundary = YES;
// 添加直线边界
// [collisionB addBoundaryWithIdentifier:@"line" fromPoint:CGPointMake(0, 200) toPoint:CGPointMake(320, 420)];
// 添加图形的边界
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:self.view.frame];
[collisionB addBoundaryWithIdentifier:@"abc" forPath:path];
// 3.将物理仿真行为添加到仿真器中
[self.anim addBehavior:gravigtyB];
[self.anim addBehavior:collisionB];
}
三,吸附行为
// 1.获取当前触摸的手指
UITouch *touch = [touches anyObject];
// 2.更具手指取出位置
CGPoint point = [touch locationInView:touch.view];
// 吸附行为
// 1.创建物理仿真器
// 2.创建物理仿真行为
UISnapBehavior *snapB = [[UISnapBehavior alloc] initWithItem:self.redView snapToPoint:point];
// 设置吸附行为的"减震"
snapB.damping = 0;
// 注意: 吸附行为默认只能吸附一次, 如果多次吸附必须从仿真器中移除再重新添加
[self.anim removeAllBehaviors];
// 3.将物理仿真行为添加到仿真器中
[self.anim addBehavior:snapB];
}
这篇关于UIDynamic的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!