2013-01-17 12 views
6

मेरे पास मुख्य दृश्य पर कई UIImageViews को संभालने वाला UIViewController है। नीचे एक यूआईटीयूबलबार है जिसके साथ बातचीत करने के लिए कुछ आइटम हैं।UIViewController पर इंटरफेस रोटेशन का पता लगाएं, भले ही परिभाषित नहीं किया गया हो - (NSUInteger) समर्थित इंटरफेसऑरिएंटेशन

अब, जब मैं डिवाइस को घुमाता हूं, तो मैं नहीं चाहता कि दृश्य नियंत्रक घूमने के लिए, लेकिन केवल UIImageViews। दूसरे शब्दों में, नीचे टूलबार बाएं (या दाएं) पर होगा, लेकिन छवि दृश्य सही ढंग से घुमाए जाएंगे।

तो,, विधियों

- (BOOL)shouldAutoRotate { 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskPortrait; 
} 

और

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
// rotate the image views here 
} 

डिवाइस पर किसी रोटेशन निष्पादित नहीं किया जाएगा के साथ संयुक्त का उपयोग कर, क्योंकि केवल एक ही इंटरफ़ेस अभिविन्यास है द्वारा समर्थित (UIInterfaceOrientationMaskPortrait)। लेकिन जब मैं supportedInterfaceOrientations -method में समर्थित होने के लिए एक और इंटरफ़ेस अभिविन्यास जोड़ता हूं, तो दृश्य नियंत्रक भी घुमाएगा।

मैं दृश्य नियंत्रक के लिए घूर्णन का पता कैसे लगा सकता हूं, भले ही केवल एक अभिविन्यास समर्थित है? या बदलते डिवाइस अभिविन्यास के आधार पर UIViews को घुमाने के लिए एक और संभावना है?

किसी भी मदद के लिए धन्यवाद!

+0

मिले जवाब: हिंदुस्तान टाइम्स इस deviceDidRotate समारोह का एक उदाहरण है tp: //stackoverflow.com/questions/14387735/can-i-observe-when-a-uiviewcontroller-changes-interfaceorientation – uruk

उत्तर

8

डिवाइस के भौतिक अभिविन्यास में परिवर्तनों का पता लगाने के लिए UIDevice इंस्टेंस का उपयोग करने का प्रयास करें। प्राप्त अधिसूचना (उदाहरण के लिए viewWillAppear: विधि में) कुछ इस तरह उपयोग कर सकते हैं शुरू करने के लिए है: डिवाइस रोटेशन घटनाओं प्राप्त पंजीकरण रद्द करने के लिए

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

    //No reason to ask NSNotification because it many cases `userInfo` equals to 
    //@{UIDeviceOrientationRotateAnimatedUserInfoKey = 1;} 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceDidRotate) name:@UIDeviceOrientationDidChangeNotification object:nil]; 
} 

, (उदाहरण के लिए viewWillDisappear: में) इस का उपयोग करें:

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 

    [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil]; 
} 

और बाद में यहां 10 सेकंड - निश्चित रूप से -

- (void)deviceDidRotate { 
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 

    switch (orientation) { 
     case UIDeviceOrientationPortrait: 
     case UIDeviceOrientationPortraitUpsideDown: 
      // do something for portrait orientation 
      break; 
     case UIDeviceOrientationLandscapeLeft: 
     case UIDeviceOrientationLandscapeRight: 
      // do something for landscape orientation 
      break; 

     default: 
      break; 
    } 
} 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^