swift 加速传感器

加速传感器以前用的UIAccelerometer实现,但是Xcode6后完全放弃了,使用CoreMotion代替它能监听到x,y,z三个方向的加速度,听起来比较炫,实际上使用方法很简单,具体使用步骤如下:

1、实例化CMMotionManager类

2、向CMMotionManager的accelerometerUpdateInterval属性中设置通知间隔时间值。

3、使用NSOperationQueue.currentQueue()建立一个监听队列

4、使用startAccelerometerUpdatesToQueue 方法更新监听队列,并设置回调函数用于接受加速度通知,通知时间间隔已经在第二步设置过。在回调函数中使用accelerometerData.acceleration 相关属性可以获得x,y,z各方向的加速度。

import UIKit
import CoreMotion
class ViewController: UIViewController{
   
    var ball:UIImageView!
      //    设备x轴的加速值
    var spendX:UIAccelerationValue = 0
    //     设备x轴的加速值
    var spendY:UIAccelerationValue = 0
    var motionManager = CMMotionManager()
    
    
    
      override func viewDidLoad() {
        super.viewDidLoad()
         ball = UIImageView.init(image: UIImage(named:"1"))
         ball.frame = CGRect.init(x: 0, y: 0, width: 50, height: 50)
        ball.center = self.view.center
        self.view.addSubview(ball)
        // 告诉motionManager更新的频率
        motionManager.accelerometerUpdateInterval = 1/60
        //判断加速器是否可用
        if motionManager.isAccelerometerAvailable {
            
            let queue = OperationQueue.current
        // 开始更新,后台线程运行
          motionManager.startAccelerometerUpdates(to: queue!, withHandler: {
            (CMAccelerometerData,NSError) in
                //动态设置小球位置
                self.spendX += (CMAccelerometerData?.acceleration.x)!
                self.spendY += (CMAccelerometerData?.acceleration.y)!
                var posX = (self.ball.center.x) + CGFloat((self.spendX))
                var posY = (self.ball.center.y) - CGFloat((self.spendY))
                //碰到边框后的反弹处理
                if posX < 0{
                    posX = 0
                    //碰到左边的边框后以0.4倍的速度反弹
                    self.spendX *= -0.4
                } else if posX > (self.view.frame.size.width) {
                    posX = (self.view.frame.size.width)
                    //碰到右边的边框有以0.4倍的速度反弹
                    self.spendX *= -0.4
                }
                if posY < 0{
                    posY = 0
                    //碰到上面的边框不反弹
                    self.spendY = 0
                } else if posY > (self.view.bounds.size.height){
                    posY = (self.view.frame.size.height)
                    //碰到下面的边框以1.5倍的速度反弹
                    self.spendY *= -1.5
                }
                self.ball.center = CGPoint.init(x: posX, y: posY)
 
             })
 
            

            
        }
    }
   
   
    
    
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值