iOS-UIDynamic物理仿真-捕捉-UISnapBehavior

捕捉-UISnapBehavior

今天我们来讲物理仿真的另一种行为捕捉行为,不多说先上图
iOS-UIDynamic物理仿真-捕捉-UISnapBehavior_第1张图片
套路和之前物理仿真重力/碰撞的实现是一致的
首先在storyboard拖取一个View,设置一下frame属性,当然偏好纯代码的同学也可也在viewDidload方法中手动创建

@property (weak, nonatomic) IBOutlet UIView *testView;

设置一下控件的圆角,其次给控制器的View添加UITapGestureRecognizer手势对象(点击手势)

self.testView.layer.cornerRadius = 25;

    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewDidTapGesture:)];

    [self.view addGestureRecognizer:tapGesture];

在viewDidTapGesture:方法中实现点击手势之后的具体操作(捕捉仿真动画)

- (void)viewDidTapGesture:(UITapGestureRecognizer *)tapGesture {
    //获取手指当前的触摸点
    CGPoint currentTapPoint = [tapGesture locationInView:self.view];

    //创建物理仿真器
    self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];

    //创建物理仿真行为
    UISnapBehavior *snap = [[UISnapBehavior alloc] initWithItem:self.testView snapToPoint:currentTapPoint];

    //设置属性
    // snapPoint                                                                捕获的点
    // damping; // damping value from 0.0 to 1.0. 0.0 is the least oscillation. 阻尼系数
    snap.damping = 0.2;

    //添加行为
    [self.animator addBehavior:snap];

    //改变控件的颜色
    self.testView.backgroundColor = [self randomColor];

}
//产生随机色的方法
- (UIColor *)randomColor {
    CGFloat red = arc4random() % 256;
    CGFloat green = arc4random() % 256;
    CGFloat blue = arc4random() % 256;

    return [UIColor colorWithRed:red / 255.0 green:green / 255.0 blue:blue / 255.0 alpha:1];
}

最后贴一下源码地址物理仿真

你可能感兴趣的:(iOS)