2016-02-12 11 views
7

पर स्क्रीन रोटेशन यह एक लोकप्रिय सवाल है, लेकिन मैं किसी भी समाधान है कि स्विफ्ट 2.स्विफ्ट 2: केवल पूर्ण स्क्रीन वीडियो

पर काम किया एप्लिकेशन केवल चित्र है नहीं पा सके। लेकिन यूट्यूब जैसे पूर्ण स्क्रीन वीडियो देखते समय, उपयोगकर्ताओं को परिदृश्य में घूमने में सक्षम होना चाहिए।

उद्देश्य सी पर, यह सबसे आसान समाधान हो गया था और मैं एक लंबे समय के लिए इस्तेमाल किया: जबकि वीडियो पूर्ण स्क्रीन पर है

AppDelegate file: 

static NSString * const VIDEO_CONTROLLER_CLASS_NAME_IOS7 = @"MPInlineVideoFullscreenViewController"; 
static NSString * const VIDEO_CONTROLLER_CLASS_NAME_IOS8 = @"AVFullScreenViewController"; 

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{ 

    if ([[window.rootViewController presentedViewController] isKindOfClass:NSClassFromString(VIDEO_CONTROLLER_CLASS_NAME_IOS7)] || 
[[window.rootViewController presentedViewController] isKindOfClass:NSClassFromString(VIDEO_CONTROLLER_CLASS_NAME_IOS8)]) { 

     return UIInterfaceOrientationMaskAllButUpsideDown; 

    } else { 

    return UIInterfaceOrientationMaskPortrait; 

    } 

} 

यह सब झुकाव अनुमति देता है। अन्यथा, पोर्ट्रेट केवल।

लेकिन मुझे स्विफ्ट पर यह काम करने में कठिनाई हो रही है। स्विफ्ट पर पूर्ण स्क्रीन वीडियो प्लेयर होने पर स्क्रीन को घुमाने के लिए संभव है?

उत्तर

6

इस तरह कुछ के बारे में क्या?

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask { 

     var classesToCheckFor = [AnyClass]() 

     if let ios7Class = NSClassFromString("MPInlineVideoFullscreenViewController") { 
      classesToCheckFor.append(ios7Class) 
     } 

     if let ios8Class = NSClassFromString("AVFullScreenViewController") { 
      classesToCheckFor.append(ios8Class) 
     } 

     for classToCheckFor in classesToCheckFor { 
      if (self.window?.rootViewController?.presentedViewController?.isKindOfClass(classToCheckFor) != nil) { 
       return .AllButUpsideDown 
      } 
     } 

     return .Portrait 
    } 

NSClassFromString संभावित nil लौट सकते हैं, लेकिन isKindOfClass एक गैर वैकल्पिक AnyClass की आवश्यकता है। मैं यह देखने के लिए जांच कर रहा हूं कि प्रत्येक वर्ग को मंच पर लोड किया जा सकता है, जो कि सरणी में लोड की गई कक्षाओं को जोड़ता है, और उसके बाद वर्गों की सरणी के माध्यम से पुनरावृत्ति करता है, यह देखने के लिए कि presentedViewController किसी भी वर्ग का है या नहीं। यदि ऐसा है, तो हम .AllButUpsideDown लौटते हैं। यदि न तो वर्ग लोड किया जा सकता है, या presentedViewController या तो कक्षा का नहीं है, तो हम .Portrait लौटाते हैं।

+0

iOS 8 घूर्णन नहीं है, लेकिन iOS पर अच्छा काम करता है 9. धन्यवाद! – tomDev

+0

यह सुनिश्चित करने के लिए कि ऐप पोर्ट्रेट पर वापस आ जाएगा, यह "समर्थित इंटरफेसऑरिएंटेशनफॉरविंडो" के बजाय "समर्थित इंटरफेसऑरिएंटेशन" का बेहतर उपयोग करता है। इस तरह जब वीडियो को खारिज कर दिया जाता है तो अभिविन्यास स्वचालित रूप से पोर्ट्रेट पर वापस जायेगा। – tomDev

+0

धन्यवाद, यह दौड़ने और स्वत: पूर्ण का उपयोग करने का एक उपज था ... खुशी है कि आप इसे काम कर रहे हैं। – JAL

2

यहाँ आईओएस 10 के लिए समाधान:

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { 

if let presentedViewController = window?.rootViewController?.presentedViewController { 
    let className = String(describing: type(of: presentedViewController)) 
    if ["MPInlineVideoFullscreenViewController", "MPMoviePlayerViewController", "AVFullScreenViewController"].contains(className) 
    { 
     return UIInterfaceOrientationMask.allButUpsideDown 
    } 
} 

return UIInterfaceOrientationMask.portrait 

}

0

मैं इस कोड का उपयोग कर रहा दूसरों के आधार पर जवाब देने के

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { 

     if let videoClass = NSClassFromString("AVFullScreenViewController"), self.window?.rootViewController?.presentedViewController?.isKind(of: videoClass) != nil { 
      return .allButUpsideDown 
     } 

    return [.portrait] 
    } 
1

स्विफ्ट 2.2 Natividad लारा डियाज़ जवाब के संस्करण:

if let presentedViewController = window?.rootViewController?.presentedViewController { 
    let className = String(presentedViewController.dynamicType) 
    if ["MPInlineVideoFullscreenViewController", "MPMoviePlayerViewController", "AVFullScreenViewController"].contains(className) { 
     return UIInterfaceOrientationMask.All 
    } 
} 
0

मैंने पाया कि इस समाधान तेजी से 3 के लिए किसी भी प्रयास के बिना बहुत आसानी से काम करता है:

AppDelegate.swift में

, इस समारोह जोड़ें:

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { 
    if window == self.window { 
     return .portrait 
    } else { 
     return .allButUpsideDown 
    } 
} 
संबंधित मुद्दे