2014-06-09 18 views
9

Swift'de hareket yöneticisini kullanmaya çalışıyorum ancak güncelleme blokumun içindeki günlük hiçbir zaman yazdırmıyor.Motion Manager, Swift uygulamasında çalışmıyor

var motionManager: CMMotionManager = CMMotionManager() 
    motionManager.accelerometerUpdateInterval = 0.01 
    println(motionManager.deviceMotionAvailable) // print true 
    println(motionManager.deviceMotionActive) // print false 
    motionManager.startDeviceMotionUpdatesToQueue(NSOperationQueue.currentQueue(), withHandler:{ 
     deviceManager, error in 
     println("Test") // no print 
    }) 

    println(motionManager.deviceMotionActive) // print false  

Amacım-C uygulaması iyi çalışıyor. Güncelleme bloğumun neden çağrılmadığını bilen var mı?

cevap

22

Yöntem döndürdüğünde, hareket yöneticisi örneğinin atılmasından kaynaklanır. Hareket yöneticisini içerecek şekilde sınıfınızda bir özellik yapmalısınız. Ek olarak, yalnızca yemenin accelerometerUpdateInterval değerini değiştirdikten sonra cihaz hareket değişikliklerini izliyormuşsunuz gibi görünüyor. Bunun yerine deviceMotionUpdateInterval özelliğini ayarlamanız gerekir.

MotionManager.startDeviceMotionUpdatesToQueue(NSOperationQueue!.currentQueue(),withHandler:{deviceManager,error in println("test")}) 
burada

Elma dokümantasyon:

https://developer.apple.com/library/ios/documentation/CoreMotion/Reference/CMMotionManager_Class/#//apple_ref/swift/tdef/CMDeviceMotionHandler

import CoreMotion 

class ViewController: UIViewController { 
    let motionManager = CMMotionManager() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     motionManager.deviceMotionUpdateInterval = 0.01 
     motionManager.startDeviceMotionUpdates(to: OperationQueue.current!) { deviceManager, error in 
      print("Test") // no print 
     } 

     print(motionManager.isDeviceMotionActive) // print false 
    } 
} 
0

Bütün obj-c değişkenleri hızlı içinde opsiyoneller (bunlar sıfır olamayacağı için) NSOperationQueue thusly bir patlama almalı böylece olduğu düşünülmektedir

Durumlar

The type o Cihaz hareket verilerinin işlenmesi için f geri çağırma.

Bildirgesi SWIFT typealias CMDeviceMotionHandler = (CMDeviceMotion !, NSError!) ->

Void
İlgili konular