ios – Swift CoreMotion在后台检测设备上的Tap或Knock

ios – Swift CoreMotion在后台检测设备上的Tap或Knock,第1张

概述我目前正在构建我的第一个iOS Swift应用程序,使用此应用程序我想在应用程序在后台运行时执行 *** 作. 一旦用户在设备上点击两次,就需要执行该 *** 作. 我启用了后台模式:应用功能中的位置更新 并在AppDelegate中设置AccelerometerUpdatesToQueue函数: let manager = CMMotionManager()func application(applicat 我目前正在构建我的第一个iOS Swift应用程序,使用此应用程序我想在应用程序在后台运行时执行 *** 作.

一旦用户在设备上点击两次,就需要执行该 *** 作.

我启用了后台模式:应用功能中的位置更新

并在AppDelegate中设置AccelerometerUpdatesToQueue函数:

let manager = cmmotionmanager()func application(application: UIApplication,dIDFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {// OverrIDe point for customization after application launch.if manager.accelerometeravailable {    manager.accelerometerUpdateInterval = 0.01    manager.startAccelerometerUpdatesToQueue(NSOperationQueue.mainQueue()) {        [weak self] (data: CMAccelerometerData!,error: NSError!) in        println(data.acceleration.z)    }}     return true}

控制台按预期打印出acceleration.z值,但是一旦按下主页按钮,控制台就会打印停止.

我在网上搜索了一个关于如何做到这一点的示例代码,我知道这是可能的…因为我们都知道应用程序“Knock Knock to unlock”,但我似乎无法找到一段示例代码对斯威夫特来说.

解决方法 我得到了它的工作!这是我的解决方案,随意提出改进:)

class AppDelegate: UIResponder,UIApplicationDelegate {    var window: UIWindow?    let manager = cmmotionmanager()    var knocked : Bool = false    let motionUpdateInterval : Double = 0.05    var knockreset : Double = 2.0    func application(application: UIApplication,dIDFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {        if manager.deviceMotionAvailable {            manager.deviceMotionUpdateInterval = motionUpdateInterval // seconds            manager.startDeviceMotionUpdatesToQueue(NSOperationQueue.mainQueue()) {                [weak self] (data: CMDeviceMotion!,error: NSError!) in                if (data.useracceleration.z < -0.7) || (data.useracceleration.z > 0.7) { // Check if device is knocked                    // Check for double knock                    if self!.knocked == false {                        // First knock                        println("First Knock")                        self!.knocked = true                    }else{                        // Second knock                        println("Double Knocked")                        self!.knocked = false                        self!.knockreset = 2.0                        // Action:                    }                }                // Countdown for reset action (second knock must be within the knockreset limit)                if (self!.knocked) && (self!.knockreset >= 0.0) {                    self!.knockreset = self!.knockreset - self!.motionUpdateInterval                }else if self!.knocked == true {                    self!.knocked = false                    self!.knockreset = 2.0                    println("reset")                }            }        }        return true    }
总结

以上是内存溢出为你收集整理的ios – Swift CoreMotion在后台检测设备上的Tap或Knock全部内容,希望文章能够帮你解决ios – Swift CoreMotion在后台检测设备上的Tap或Knock所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1072797.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存