博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
检测设备朝向和移动
阅读量:4708 次
发布时间:2019-06-10

本文共 3272 字,大约阅读时间需要 10 分钟。

1、加速计和陀螺仪

导入CoreMotion.framework框架。

@IBOutlet var xLabel:UILabel!    @IBOutlet var yLabel:UILabel!    @IBOutlet var zLabel:UILabel!        @IBOutlet var orientationLabel:UILabel!        //加速计管理者-所有的操作都会由这个motionManager接管    var motionManager:CMMotionManager!
//------ CoreMotion 加速计        motionManager = CMMotionManager()//注意CMMotionManager不是单例        motionManager.accelerometerUpdateInterval = 0.1//设置读取时间间隔                if motionManager.accelerometerAvailable//判断是否可以使用加速度计        {            //获取主线程并发队列,在主线程里跟新UI            motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue.mainQueue(), withHandler: { (let accelerometerData:CMAccelerometerData?, let error:NSError?) -> Void in                                if error != nil                {                    self.motionManager.stopAccelerometerUpdates()//停止使用加速度计                }else                {                                    self.xLabel.text = "x:\(accelerometerData!.acceleration.x)"                    self.yLabel.text = "Y:\(accelerometerData!.acceleration.y)"                    self.zLabel.text = "Z:\(accelerometerData!.acceleration.z)"                }            })                                }else        {            let aler = UIAlertView(title: "您的设备不支持加速计", message: nil, delegate: nil, cancelButtonTitle: "OK")            aler.show()        }

2、判断设备方向

//感知设备方向-开启监听设备方向        UIDevice.currentDevice().beginGeneratingDeviceOrientationNotifications()                //添加通知,监听设备方向改变        NSNotificationCenter.defaultCenter().addObserver(self, selector: "receivedRotation", name: UIDeviceOrientationDidChangeNotification, object: nil)                //关闭监听设备方向        UIDevice.currentDevice().endGeneratingDeviceOrientationNotifications()
// MARK: - 判断设备方向代理方法    func receivedRotation()    {        let device = UIDevice.currentDevice()                if device.orientation == UIDeviceOrientation.Unknown        {            orientationLabel.text = "Unknown"        }        else if device.orientation == UIDeviceOrientation.Portrait        {            orientationLabel.text = "Portrait"        }        else if device.orientation == UIDeviceOrientation.PortraitUpsideDown        {             orientationLabel.text = "PortraitUpsideDown"        }        else if device.orientation == UIDeviceOrientation.LandscapeLeft        {             orientationLabel.text = "LandscapeLeft"        }        else if device.orientation == UIDeviceOrientation.LandscapeRight        {             orientationLabel.text = "LandscapeRight"        }else if device.orientation == UIDeviceOrientation.FaceUp        {             orientationLabel.text = "FaceUp"        }        else  if device.orientation == UIDeviceOrientation.FaceDown        {             orientationLabel.text = "FaceDown"        }    }

3、摇晃事件

// MARK: - 摇晃事件    override func motionBegan(motion: UIEventSubtype, withEvent event: UIEvent?)    {                print("motionBegan")//开始摇晃    }        override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent?)    {        print("motionEnded")//摇晃结束    }            override func motionCancelled(motion: UIEventSubtype, withEvent event: UIEvent?)    {        print("motionCancelled")//摇晃被意外终止    }

 

转载于:https://www.cnblogs.com/fengmin/p/5715550.html

你可能感兴趣的文章
递归算法
查看>>
java继承 、方法重写、重写toString方法
查看>>
SQL注入原理-手工联合注入查询技术
查看>>
实验3 SQL注入原理-万能密码注入
查看>>
redis cluster
查看>>
feign传输String json串 自动转义 \ 解决方法
查看>>
本站已稳定运行了XX天,网页时间显示功能实现方法
查看>>
实习的开始阶段
查看>>
搭建第一个node服务器
查看>>
团队冲刺个人总结8
查看>>
Asp.Net Mvc Area二级域名
查看>>
requirements基本使用
查看>>
C++ Boost入门
查看>>
android:intent flags
查看>>
Vue疑难杂症
查看>>
spring boot 错误处理之深度历险
查看>>
MySQL对于有大量重复数据表的处理方法
查看>>
Android应用开发学习笔记之多线程与Handler消息处理机制
查看>>
ubuntu 设置环境变量
查看>>
JSTL详解(一)
查看>>