ios之小应用-重力感应

重力感应代码:

#import "ViewController.h"
#import <CoreMotion/CoreMotion.h>

@interface ViewController ()
//创建管理对象 水平仪
@property (nonatomic, strong) CMMotionManager *manager;
//创建动画对象
@property (nonatomic, strong) UIDynamicAnimator *dyanimat;
//重力
@property (nonatomic, strong) UIGravityBehavior *gravit;
//碰撞
@property (nonatomic, strong) UICollisionBehavior *collision;

@end

@implementation ViewController

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

#pragma mark - 实例化对象
- (CMMotionManager *)manager {
    if (_manager == nil) {
        _manager = [[CMMotionManager alloc] init];
        _manager.deviceMotionUpdateInterval = 0.01;
    }
    return _manager;
}

- (UIDynamicAnimator *)dyanimat {
    if (_dyanimat == nil) {
        _dyanimat = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
    }
    return _dyanimat;
}

- (UIGravityBehavior *)gravit {
    if (_gravit == nil) {
        _gravit = [[UIGravityBehavior alloc] init];
    }
    return _gravit;
}

- (UICollisionBehavior *)collision {
    if (_collision == nil) {
        _collision = [[UICollisionBehavior alloc] init];
        _collision.translatesReferenceBoundsIntoBoundary = YES;
    }
    return _collision;
}

#pragma mark - 给对象添加动画
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    //最多可添加50个
    if (self.view.subviews.count >= 50) {
        NSLog(@"已到上限");
        return;
    }
    //获取手指的点
    UITouch *touch = touches.anyObject;
    CGPoint point = [touch locationInView:self.view];
    //创建及切圆角
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
    view.layer.cornerRadius = 10;
    view.layer.masksToBounds = YES;
    //手指的点就是view的中心点
    view.center = point;
    //随机颜色
    view.backgroundColor = [UIColor colorWithRed:arc4random_uniform(255)/255.0 green:arc4random_uniform(255)/255.0 blue:arc4random_uniform(255)/255.0 alpha:1];
    [self.view addSubview:view];
    
    //将对象添加到动画里
    [self.dyanimat addBehavior:self.gravit];
    [self.dyanimat addBehavior:self.collision];
    
    // 为view添加重力效果
    [self.gravit addItem:view];
    // 为view添加碰撞效果
    [self.collision addItem:view];
    
    // 开始监听
    [self.manager startDeviceMotionUpdatesToQueue:NSOperationQueue.mainQueue withHandler:^(CMDeviceMotion * _Nullable motion, NSError * _Nullable error) {
        // 设置重力方向
        self.gravit.gravityDirection = CGVectorMake(motion.gravity.x, -motion.gravity.y);
    }];
    
    //打印添加的控件的个数
    NSLog(@"%zd - %@", self.view.subviews.count, view);
    
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end   

 

下面是模拟器截图,正常情况是真机去测试的,因为水平仪模拟器是没办法测的。

posted @ 2018-07-06 10:35  哇哈爽  阅读(1382)  评论(0编辑  收藏  举报