2014-11-15 9 views
35

मेरे पास एक UIView है जो ऑटो-लेआउट का उपयोग नहीं कर रहा है और कुछ घटक मुख्य दृश्य से एक्स और वाई समन्वय के प्रतिशत के आधार पर प्रदर्शित होते हैं।आईओएस: डिवाइस घुमाए जाने के बाद फ़ंक्शन कैसे चलाएं (स्विफ्ट)

पहले मैं didRotateFromInterfaceOrientation में अपनी स्थिति अपडेट करने के लिए एक फ़ंक्शन चलाता था, हालांकि मुझे लगता है कि यह अब आईओएस 8 में बहिष्कृत है।

मैंने व्यूविल्ल ट्रांजिशन टॉइसइज़ पर एक नज़र डाली है लेकिन यह अजीब परिणाम दे रहा है, और ऐसा लगता है कि कोई दृश्य नहीं है।

डिवाइस रोटेशन के बाद फ़ंक्शन चलाने के लिए कोई आसान तरीका (स्विफ्ट में) है?

+0

उद्देश्य सी और स्विफ्ट के लिए इस लिंक का संदर्भ लें। शुद्ध/टी/b06ad3ba166a/ios-रोटेशन-तरीकों-पदावनत-बराबर के- didrotatefrominterfaceorient.html –

उत्तर

93

viewWillTransitionToSize प्रतिनिधि विधि को UIViewControllerTransitionCoordinator अनुरूप वस्तु के साथ बुलाया जाता है। प्रोटोकॉल घोषित करने वाली एक विधि animateAlongsideTransition(_:animation, completion:) है। संक्रमण पूरा होने के बाद आप कोड निष्पादन के लिए इसका उपयोग कर सकते हैं।

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { 
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) 
    coordinator.animateAlongsideTransition(nil, completion: { 
     _ in 

     // Your code here 
    }) 
} 
+2

मैं देख सकता हूँ क्यों वे आप ऐस कहते हैं! धन्यवाद भाई, महान काम करता है। – Richard

+0

आप, मेरे अच्छे आदमी, एक प्रतिभाशाली हैं! – Yoko

+0

'super.viewWillTransitionToSize नहीं होना चाहिए:' पहले कहा जाना चाहिए? – Behdad

15

जवाब https://stackoverflow.com/a/26944087/6583492 ऊपर बिल्कुल सही Acey और Moonwalkr करने के लिए धन्यवाद है। लेकिन तेजी से 3.0 के लिए कहीं भी होगी निम्नलिखित

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 
    super.viewWillTransition(to: size, with: coordinator) 
    coordinator.animate(alongsideTransition: nil) { _ in 
     // Your code here 
    } 
} 
+0

बढ़िया, आपको इसे हटाने की जरूरत है; लाइन 5 – Ruben

+0

पर धन्यवाद 0 :-) पुरानी आदतें ... – daxh

3

हालांकि यहां उद्देश्य सी संस्करण के लिए कहा की तरह दिखता है: : http: //www.scriptscoop

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { 
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { 

    // change any properties on your views 

} completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { 
    UIDeviceOrientation orientation = [UIDevice currentDevice].orientation; 
    if(UIDeviceOrientationIsPortrait(orientation)) { 
     NSLog(@"portrait"); 
    } else { 
     NSLog(@"landscape"); 
    } 
}]; 
} 
संबंधित मुद्दे