iOS 传感器应用集合


距离传感器


#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    /**

     使用场景:类似微信的语音播放, 根据距离传感器来判断使用什么东西播放

     */

    

    //1. 打开距离传感器

    //proximityMonitoringEnabled: 距离检测可用

    [UIDevicecurrentDevice].proximityMonitoringEnabled =YES;

    

    //2. 添加通知

    [[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(proximityStateDidChangeNotification)name:UIDeviceProximityStateDidChangeNotificationobject:nil];

}


#pragma mark 通知绑定的方法

- (void)proximityStateDidChangeNotification {

    if ([UIDevicecurrentDevice].proximityState) {

        NSLog(@"有逗逼靠近了");

    } else {

        NSLog(@"逗逼被吓跑了");

    }

}


@end


=================================================================

PUSH是实时采集数据,PULL是在需要的时候再去主动采集数据
Coremotion.frameWork

    /**

     .加速计 : 检测力在某个方向上有作用 (加速度)

     使用场景: 摇一摇  / 计步器

     */



PUSH方式实现加速计,

 (void)acceleromatePush {

    // push方式 -->系统会按照设置好的更新间隔, 不断的返回数据

    //1. 创建运动管理器

    self.motionManager = [CMMotionManagernew];

    

    //2. 判断加速计是否可用 iPhone4

    if (![self.motionManagerisAccelerometerAvailable]) {

        NSLog(@"硬件损坏或者没有对应的传感器");

        return;

    }

    

    //3. 设置采样间隔 单位是秒

    self.motionManager.accelerometerUpdateInterval =1;

    

    //4. 开始采样 --> 适用于push方式

    [self.motionManagerstartAccelerometerUpdatesToQueue:[NSOperationQueuemainQueue] withHandler:^(CMAccelerometerData *_Nullable accelerometerData,NSError * _Nullable error) {

        

        // Z轴的负方向指向了地面,所以打印出了-z

        

        //1. 打印的值,是轴的负方向的值. 那个轴的方向指向了地面,就会打印哪个方向的值

        

        //2. 在某个轴上运动的越快, 值会越大.默认不动 1~-1;

        

        CMAcceleration acceleration = accelerometerData.acceleration;

        

        NSLog(@"x: %f, y: %f, z: %f", acceleration.x, acceleration.y, acceleration.z);

    }];

}



puLL方式实现加速计,持续采样

- (void)acceleratePull

{

    //pull方式 -->在需要的时候, 才获取加速计的数据值

    //1. 创建运动管理器

    self.motionManager = [CMMotionManagernew];

    

    //2. 判断加速计是否可用 iPhone4

    if (![self.motionManagerisAccelerometerAvailable]) {

        NSLog(@"硬件损坏或者没有对应的传感器");

        return;

    }

    

    //3. 开始采样 -->适用于pull方式,一旦采样所有的数据都保存在运动管理器中,不需要代理方法

    [self.motionManagerstartAccelerometerUpdates];

    CMAccelerometerData *accelerometerData = self.motionManager.accelerometerData;

//    

//    CMAcceleration acceleration = accelerometerData.acceleration;

//    

//    NSLog(@"x: %f, y: %f, z: %f", acceleration.x, acceleration.y, acceleration.z);



}


============================================================



push方式实现陀螺仪:

    /**

     .陀螺仪 :检测转动的角速度  (转动角速度)

     */


- (void)gyroPush

{

    //push方式

    //1. 创建运动管理器

    self.motionManager = [CMMotionManagernew];

    

    //2. 判断陀螺仪是否可用

    if (![self.motionManagerisGyroAvailable]) {

        NSLog(@"硬件损坏或者没有对应的传感器");

        return;

    }

    

    //3. 设置采样间隔

    self.motionManager.gyroUpdateInterval =1;

    

    //4. 开始采样

    [self.motionManagerstartGyroUpdatesToQueue:[NSOperationQueuemainQueue] withHandler:^(CMGyroData *_Nullable gyroData,NSError * _Nullable error) {

        

        // 陀螺仪的值得打印,手机沿着哪个轴转动, 那个轴的值就会发生变化.

        // 如果不发生转动, 值基本上为0

        CMRotationRate rotationRate = gyroData.rotationRate;

        NSLog(@"x: %f, y: %f, z: %f", rotationRate.x, rotationRate.y, rotationRate.z);

    }];


}

PULL方式实现陀螺仪

- (void)gyroPull

{

    //pull方式

    //1. 创建运动管理器

    self.motionManager = [CMMotionManagernew];

    

    //2. 判断陀螺仪是否可用

    if (![self.motionManagerisGyroAvailable]) {

        NSLog(@"硬件损坏或者没有对应的传感器");

        return;

    }

    

    //3.开始采样

    [self.motionManagerstartGyroUpdates];

//2. 陀螺仪的值

//    CMGyroData *gyroData = self.motionManager.gyroData;

//    

//    CMRotationRate rotationRate = gyroData.rotationRate;

//    

//    NSLog(@"x: %f, y: %f, z: %f", rotationRate.x, rotationRate.y, rotationRate.z);


}



=========================================================

/**

     .磁力计 :检测磁场的变化

     */

    

    //pull方式

    //1. 创建运动管理器

    self.motionManager = [CMMotionManagernew];

    

    //2. 判断陀螺仪是否可用

    if (![self.motionManagerisMagnetometerAvailable]) {

        NSLog(@"硬件损坏或者没有对应的传感器");

        return;

    }

    

    //3.开始采样

    [self.motionManagerstartMagnetometerUpdates];


     //3. 磁力计的值

    CMMagnetometerData *magnetometerData = self.motionManager.magnetometerData;

    

    // 磁力计的单位: 特斯拉

    CMMagneticField magneticField = magnetometerData.magneticField;

    

    NSLog(@"x: %f, y: %f, z: %f", magneticField.x, magneticField.y, magneticField.z);

=========================================================

摇一摇的实现

    /**

     实现摇一摇的方式

     1. 加速计可以实现 x, y, z .可以判断3个轴的值,任何一个轴的值大于某个特定的值(5)

     2. 使用系统封装好的方法

     */


- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event

{

    //微信:摇动开始, 2张图像张开

    NSLog(@"开始摇一摇");

}


- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event

{

    NSLog(@"摇动取消");

}


- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event

{

    //微信:摇动结束: 弹出摇到的人

    NSLog(@"摇完了,摇到到lb");

}


=============================================================


计步器的使用



#import "ViewController.h"

#import <CoreMotion/CoreMotion.h>


@interface ViewController ()


/** iOS7计步器*/

@property (nonatomic,strong) CMStepCounter *setpCounter;


/** iOS8以后的计步器*/

@property (nonatomic,strong) CMPedometer *pedomete;


@property (weak, nonatomic) IBOutletUILabel *label;


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    //1. 判断计步器是否可用

    if (![CMPedometerisStepCountingAvailable]) {

        return;

    }

    

    //2. 创建计步器

    self.pedomete = [CMPedometernew];

    

    //3. 开始统计步数

    //FromDate: 开始统计的时间

    [self.pedometestartPedometerUpdatesFromDate:[NSDatedate] withHandler:^(CMPedometerData *_Nullable pedometerData, NSError * _Nullable error) {

        

        // 计步器的数据并不是实时返回的,会有一定的延迟

        //更新界面 -->主线程

        [selfperformSelectorOnMainThread:@selector(updateUI:)withObject:pedometerData.numberOfStepswaitUntilDone:NO];

        

        NSLog(@"当前走了%@", pedometerData.numberOfSteps);

    }];

}


#pragma mark 更新界面

- (void)updateUI:(NSNumber *)number

{

    self.label.text = [NSStringstringWithFormat:@"当前一共走了%@", number];

}


#pragma mark iOS7 ~iOS8 使用的计步器

- (void)stepCounter {

    //1. 判断计步器是否可用

    if (![CMStepCounterisStepCountingAvailable]) {

        return;

    }

    

    //2. 创建计步器

    self.setpCounter = [CMStepCounternew];

    

    //3. 开始统计补数

    [self.setpCounterstartStepCountingUpdatesToQueue:[NSOperationQueuemainQueue] updateOn:5withHandler:^(NSInteger numberOfSteps,NSDate * _Nonnull timestamp,NSError * _Nullable error) {

        NSLog(@"number: %zd", numberOfSteps);

    }];

    

}


@end


==========================================================

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值