采用CoreMotion.framework加速度框架

代码方面主要分两块,要有一个加速度的核心类,负责获取到加速度,一个视图控制类,视图控制类可自由选择,在需要的时候调用加速度核心类。

一:加速度核心类:

首先需要创建一个加速度核心类MotionClass,导入CoreMotion

核心类的创建思路是:

1.需要创建一个单例,获取到加速度cmmotionmanager实例。

2.类中需要两个方法,一个Start获取加速度,一个Stop停止获取加速度

3.需要创建一个协议方法,用于传导获取到的加速度变量


类代码如下

//
//  motion.swift
//  testacceleration
//
//  Created by X-DL on 15/4/11.
//  copyright (c) 2015年 dl. All rights reserved.
//

import UIKit
import CoreMotion


protocol MotionDelegate:NSObjectProtocol{
    func updateXY(X:Double,Y:Double,Z:Double)
}

class MotionClass:UIView{
    /// 创建协议实例
    weak var delegate : MotionDelegate?
    
    /// 创建加速度单例
    class var shareMotion: cmmotionmanager {
        struct MotionStruct{
            static var motionManager:cmmotionmanager?
            static var token:dispatch_once_t = 0
        }
        dispatch_once(&MotionStruct.token) {
            if MotionStruct.motionManager == nil
            {
                MotionStruct.motionManager = cmmotionmanager()
            }
        }
        return MotionStruct.motionManager!
    }
    
    /**
    开始加速度检测方法
    */
    func startMotion(){
        let motion = MotionClass.shareMotion
        if motion.gyroAvailable {
            motion.accelerometerUpdateInterval = NSTimeInterval(2)
            motion.startAccelerometerUpdatesToQueue(NSOperationQueue.mainQueue(),withHandler: {
                (data,error) in
                
                let x = data.acceleration.x
                let y = data.acceleration.y
                let z = data.acceleration.z
                //调用协议,传入参数
                self.delegate?.updateXY(x,Y:y,Z:z)
            })
        }else{
            println("motino is false")
        }
    }
    /**
    停止加速度检测
    */
    func stopMotion(){
        MotionClass.shareMotion.stopAccelerometerUpdates()
    }
}
这样即是加速度核心类的基本框架,而后在VC类中实现协议方法,设置MotionClass的delegate为self。然后调用相应的start或stop方法即可

Swift之加速度传感器编程的更多相关文章

  1. 使用iOS 7获取后台步骤

    我正在开发一个应用程序,在其中我应该获得我在体育活动中所做的步骤数.我找到了这段代码:使用此代码,当iPhone的显示器打开时,它工作得很好,但是当我关闭显示器时,它不再起作用.为了跟踪位置,我在iOS7中看到了一个功能“后台模式”.使用此功能,我可以在iPhone显示屏关闭时获取坐标.现在我要在显示器关闭时获取加速度计值,我该怎么做?我在网上看到iOS不允许在后台模式下使用加速度计,我如何在后台模式下使用加速度计来计算步数?

  2. iOS自由落体了解iphone的加速度计数据

    为什么当我将手机从大约4英尺放到枕头上,然后绘制用户加速度的大小时,我得到的峰值为1.5g然后是1g然后是2.5g然后是1g然后是2.5g然后是1g时间范围内的0g自由落体,有10个样本.理想情况下,由于重力减去空气阻力,它应该以恒定速率向下加速,那么为什么加速度会在自由落体时上下波动?是什么导致了这种噪音?

  3. 如何在IOS中获取加速度计数据?

    我正在使用UIAccelerotmeterDelegate方法accelerometer:didAccelerate:,但最近该方法已经在iOS5.0中弃用.那么获取加速度计数据的另一种方法是什么?文档没有提到我们应该使用的替代方法.解决方法您应该使用CoreMotionframework(在iOS4.0中引入)作为替代.创建一个cmmotionmanager的实例,并告诉它startAccele

  4. Swift之加速度传感器编程

    一:加速度核心类:首先需要创建一个加速度核心类MotionClass,导入CoreMotion核心类的创建思路是:1.需要创建一个单例,获取到加速度cmmotionmanager实例。然后调用相应的start或stop方法即可

  5. Swift - 加速传感器CoreMotion的用法,小球加速运动并反弹样例

    使用startAccelerometerUpdatesToQueue方法更新监听队列,并设置回调函数用于接受加速度通知。2,通知频率设置建议accelerometerUpdateInterval表示通知频率,表示间隔多少秒通知一次。一个是重力加速度,一个是用户对手机施加的加速度。所以当手机垂直静止时,虽然Useracceleration是0,但由于有重力加速度,所以两个合成后加速度y属性便是为负值。6,测试样例该应用运行后,将在画面正中央显示一个球体。倾斜手机时,球体将向着倾斜的方向运动。碰撞到四壁后反弹

  6. 从android加速度计获取倾斜角度

    我有一个实现SensorEventListener的类,我想得到我的设备使用加速度计的倾斜角度.我在互联网上查找了一些例子但他们使用了Sensor.TYPE_MAGNETIC_FIELD.我相信我的设备没有这个传感器,因为我做的时候以下检查manager.getSensorList(Sensor.TYPE_ACCELEROMETER).size(),我得零.有没有办法通过使用获得倾斜角度Senso

  7. android – 线性加速方向,用于跟踪手机的上下移动

    我试图仅在垂直方向上跟踪设备的移动,即向上和向下移动.这应该与设备的方向无关.我已经知道或尝试过的事情就是这些>线性加速度由传感器TYPE_LINEAR_acceleration给出,轴是电话轴,因此跟踪任何特定轴都没有区别.>我尝试应用转置或旋转矢量的倒数(旋转矢量的反转或转置相同),然后尝试跟踪线性加速度矢量的z方向.似乎没有帮助.>我正在尝试使用重力值(TYPE_GraviTY)来制作点积,

  8. android – 不同移动设备中的加速度计和陀螺仪精度

    我想用移动设备的传感器实现室内定位系统.这个问题已经在几个地方讨论过,比如-here和here第一步是确定哪个平台是实现这样一个系统的最佳平台.主要的可能性是三星的galaxy/galaxy标签或iphone/ipad.最重要的标准是传感器数据的准确性.但是,这种比较非常复杂,因为精度不仅取决于设备本身,还取决于其上方的软件层.有没有关于这个问题的研究?智能手机和平板电脑的传感器之间有区别吗?任何指向网站或文章的链接都会非常有用提前致谢!

  9. Android在地球坐标系上获得加速度计

    ).我也是Android新手.我很感激你的帮助!我结合了2个先前的答案,这里是代码:1)获取地球坐标中的电话单元矢量2)反转矩阵以获得电话坐标中的地球单位矢量3)乘以单位矢量的手机加速度,将手机坐标转换为地球坐标.感谢大家的帮助!

  10. android – 滚动骰子的物理想法

    我想制作像骰子一样的滚动立方体,它对加速度计做出反应.因此,加速度计为立方体移动提供参数.我认为应该在这里使用小物理.我的问题是,在没有任何物理引擎的情况下,我应该使用什么公式,技术来完成解决方法您可能需要使用OpenGL.有一个很好的物理教程OGLhere特别是对于骰子,请看一下这个nokiademo.它是用cpp编写的(sourcehere)在物理方面,你可以看看thissite.无论如何,我

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部