动力无敌小弹球

主要功能描述:页面中的小球可以根据手机倾斜的方向做运动

运用的知识:加速计、UIDynamic物理仿真行为

具体代码:

#import "ViewController.h"

@interface ViewController ()<UIAccelerometerDelegate>
@property (strong, nonatomic) IBOutlet UIView *redView;
@property (weak, nonatomic) IBOutlet UIView *grayView;
@property (weak, nonatomic) IBOutlet UIView *blueView;
@property (strong, nonatomic) UIDynamicAnimator *animator;
@property (strong, nonatomic) UIGravityBehavior *gravity;

@end

@implementation ViewController
- (UIDynamicAnimator *)animator {
    if (_animator == nil) {
        _animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
    }
    return _animator;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.redView.layer.cornerRadius = 25;
    self.redView.layer.masksToBounds = YES;
    
    self.grayView.layer.cornerRadius = 25;
    self.grayView.layer.masksToBounds = YES;
    
    self.blueView.layer.cornerRadius = 25;
    self.blueView.layer.masksToBounds = YES;
    //获得单例对象
    UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];
    //设置代理
    accelerometer.delegate = self;
    //设置采样间隔 0.1 
    accelerometer.updateInterval = 0.1;
    [self testGravity];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}


-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
    //   NSLog(@"x加速度%f**********y加速度%f*******z加速度%f",acceleration.x,acceleration.y,acceleration.z);
    self.gravity.gravityDirection = CGVectorMake(acceleration.x-0.1, -(acceleration.y-0.1));
    
}


/// 设置重力行为
- (void)testGravity {
    // 1.创建仿真行为(进行怎样的仿真效果?)
    // 重力行为
    self.gravity = [[UIGravityBehavior alloc] initWithItems:@[self.redView,self.grayView,self.blueView]];
    self.gravity.magnitude = 10;
    
    // 2.添加物理仿真元素
    //    [self.gravity addItem:self.redView];
    
    /// 添加碰撞检测行为
    UICollisionBehavior *collision = [[UICollisionBehavior alloc] initWithItems:@[self.redView,self.grayView,self.blueView]];
    // 添加碰撞边界
    collision.translatesReferenceBoundsIntoBoundary = YES;
    
    
    UIDynamicItemBehavior *itemBehave = [[UIDynamicItemBehavior alloc] initWithItems:@[self.redView,self.grayView,self.blueView]];
    /// 弹性系数
    itemBehave.elasticity = 0.4;
    
    // 3. 执行仿真,让物理仿真元素执行仿真行为
    [self.animator addBehavior:self.gravity];
    [self.animator addBehavior:collision];
    [self.animator addBehavior:itemBehave];
}



@end

推荐阅读更多精彩内容

  • 1、不负光阴,不负自己,不负被爱,不负所爱。 2、人生不能太过圆满,求而不得未必是遗憾。 3、好的坏的我们都收下吧...
    墨舟光影阅读 627评论 1 30
  • 1. 你如果认识从前的我,也许你会原谅现在的我。 ——张爱玲《倾城之恋》 2. 于千万人之中遇见你所要遇见的人,于...
    孔小系阅读 2,086评论 4 100
  • 如果什么事情都往心里放的话,心该会有多累呀!《断舍离》一书里讲的很好,对于无能为力的事情,应当放下。正因为无能为力...
    左书虫阅读 3,276评论 16 164
  • 喂了一年多的母乳,渐渐感觉力不从心了。奶水不足,孩子夜醒也越来越频繁。 对于白天上班,夜晚熬夜的生活,一个月下来已...
    人间尽是妖魔鬼怪阅读 3,767评论 77 95
  • 诗/苹儿(茵草芳菲) 路难不难,脚知道 事顺不顺,心知道 喜也好,悲也罢 感受都是自己的 苦,自己悄悄释放 乐,自...
    茵草芳菲阅读 1,625评论 3 126