2011-08-21 6 views
13

मैं आईओएस में जीरोस्कोप सेंसर का उपयोग करके एक ऐप लिखना सीख रहा हूं। क्या एक्सेलेरोमीटर के लिए यूआईक्सेलेरेशन/यूआईएक्सेलेरोमीटर/यूआईएसीसीलेरोमीटर डिलीगेट के समान जीरोस्कोप से निपटने के लिए कक्षाएं हैं?आईओएस Gyroscope API

उत्तर

31

पहले आयात CoreMotion ढांचे

#import <CoreMotion/CoreMotion.h> 

    self.motionManager = [[CMMotionManager alloc] init]; 


    //Gyroscope 
    if([self.motionManager isGyroAvailable]) 
    { 
     /* Start the gyroscope if it is not active already */ 
     if([self.motionManager isGyroActive] == NO) 
     { 
      /* Update us 2 times a second */ 
      [self.motionManager setGyroUpdateInterval:1.0f/2.0f]; 

      /* Add on a handler block object */ 

      /* Receive the gyroscope data on this block */ 
      [self.motionManager startGyroUpdatesToQueue:[NSOperationQueue mainQueue] 
      withHandler:^(CMGyroData *gyroData, NSError *error) 
      { 
       NSString *x = [[NSString alloc] initWithFormat:@"%.02f",gyroData.rotationRate.x]; 
       self.gyro_xaxis.text = x; 

       NSString *y = [[NSString alloc] initWithFormat:@"%.02f",gyroData.rotationRate.y]; 
       self.gyro_yaxis.text = y; 

       NSString *z = [[NSString alloc] initWithFormat:@"%.02f",gyroData.rotationRate.z]; 
       self.gyro_zaxis.text = z; 
      }]; 
     } 
    } 
    else 
    { 
     NSLog(@"Gyroscope not Available!"); 
    } 

कोड कहते हैं, पहले मैं प्रस्ताव प्रबंधक का एक उदाहरण बना सकते हैं। फिर मैं देखता हूं कि डिवाइस Gyroscope का समर्थन करता है या नहीं। अगर कृपा से मर नहीं जाते हैं, तो अन्यथा जीरोस्कोप अपडेट अंतराल & सेट करें और फिर जीरोस्कोप से अपडेट प्राप्त करने के लिए पंजीकरण करें। इन अद्यतनों के साथ आपको मूल्यों के साथ क्या करना है, इसके अपने कस्टम तर्क को परिभाषित करने की आवश्यकता है। यही है कि आप जाने के लिए अच्छे हैं ...

+2

[self.motionManager isGyroAvailable] क्या यह जांच जरूरी है? क्या होता है यदि जीरोस्कोप उपलब्ध नहीं है? क्या ऐप दुर्घटनाग्रस्त है? या शून्य मान वापस करें। यदि यह शून्य मान देता है तो वह वस्तु कौन सा शून्य वापस कर देगी ?? – user682765

+2

पुरानी आईफ़ोन के बाद से यह एक चेक है जिसमें जीरोस्कोप नहीं है। यदि आप gyro API का उपयोग शुरू करते हैं तो यह क्रैश हो सकता है जब डिवाइस स्वयं समर्थित नहीं होता है। माफ़ी से सुरक्षित होना बेहतर है ... –

+0

अपडेट के रूप में: 'startGyroUpdatesToQueue' के लिए ऐप्पल का प्रलेखन मुख्य कतार का उपयोग न करने की सिफारिश करता है क्योंकि इससे अंतराल हो सकता है। या तो एक अलग कतार का उपयोग करें या जीरो डेटा प्राप्त करने के लिए बस गति प्रबंधक की '.groData' प्रॉपर्टी का उपयोग करें। यदि आप मोशन फ्रेमवर्क का उपयोग करके गेम बना रहे हैं, तो मैं अंतराल 1/60 (फ्रेम दर से मिलान करने के लिए) अंतराल बनाने की सलाह दूंगा, और यदि दोनों में से कोई भी समस्या है, तो gyro डेटा को प्राप्त करने के लिए अंतराल को चालू करें । – DDPWNAGE

6

जीरोस्कोप डेटा के लिए, आपको CoreMotion का उपयोग करने की आवश्यकता होगी। relevant section of the Event Handling Guide for iOS पढ़कर शुरू करें। आपको दो कक्षाओं के साथ काम करने की आवश्यकता होगी: CMGyroData जो जीरोस्कोप घटना डेटा को समाहित करता है, और CMMotionManager जिसका उपयोग जीरोस्कोप घटनाओं के लिए पंजीकरण करने के लिए किया जाता है।

अधिक जानकारी इस प्रश्न के चयनित जवाब में पाया जा सकता है: Apple gyroscope sample code