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   

 

下面是模擬器截圖,正常情況是真機去測試的,因為水平儀模擬器是沒辦法測的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM