2016-05-07 11 views
5

मैं निम्नलिखित कोड के साथ अपने स्विफ्ट एप्लिकेशन (आईओएस 9) में वीडियो खेल रहा हूँ:AVPlayerController: पूर्ण स्क्रीन autolayout मुद्दों

 let fileUrl = NSBundle.mainBundle().URLForResource("welcome", withExtension: ".mp4") 
     videoItem = AVPlayerItem(URL: fileUrl!) 
     videoPlayer = AVPlayer(playerItem: videoItem) 
     videoPlayer.addObserver(self, forKeyPath: "rate", options: [.New], context: nil) 

     videoPlayerController.player = videoPlayer 
     videoPlayerController.showsPlaybackControls = false 

     videoPlayerController.view.frame = CGRectMake(0, 0, playerView.frame.size.width, playerView.frame.size.height) 
     playerView.insertSubview(videoPlayerController.view, belowSubview: videoCoverView) 

     videoPlayerController.willMoveToParentViewController(self) 
     addChildViewController(videoPlayerController) 
     videoPlayerController.didMoveToParentViewController(self) 

     playerView.bringSubviewToFront(btnPlay) 

     let asset = AVAsset(URL: fileUrl!) 
     let imageGenerator = AVAssetImageGenerator(asset: asset) 
     let time = CMTime(seconds: asset.duration.seconds/2.0, preferredTimescale: 1) 

     do { 
      let imageRef = try imageGenerator.copyCGImageAtTime(time, actualTime: nil) 
      let coverImage = UIImage(CGImage: imageRef) 
      videoCoverView.image = coverImage 
     } catch { 

     } 

videoPlayerControllerAVPlayerViewController का एक उदाहरण है। playerView स्टोरीबोर्ड के माध्यम से जोड़ा गया है और इसमें ऑटोलायआउट सेटअप है। एवीप्लेयर व्यू कंट्रोलर के प्लेयर नियंत्रण के बाद मुझे प्लेयर नियंत्रणों के माध्यम से पूर्ण स्क्रीन मोड में जाने का प्रयास करने के बाद ऑटलोयआउट समस्याओं का सामना करना पड़ता है। यहां लॉग है जो मुद्रित हो जाता है।

2016-05-07 15:18:19.325 VoxTrain[2085:66307] Unable to simultaneously satisfy constraints. 
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
     (1) look at each constraint and try to figure out which you don't expect; 
     (2) find the code that added the unwanted constraint or constraints and fix it. 
    (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x7fb6a2a3f2c0 h=-&- v=-&- _UIBackdropContentView:0x7fb6a2a02310.width == _UIBackdropView:0x7fb6a053bf90.width>", 
    "<NSLayoutConstraint:0x7fb6a2992800 H:|-(14)-[UILabel:0x7fb6a2991220'Hi-Speed Scrubbing'] (Names: '|':_UIBackdropContentView:0x7fb6a2a02310)>", 
    "<NSLayoutConstraint:0x7fb6a2992850 H:[UILabel:0x7fb6a2991220'Hi-Speed Scrubbing']-(14)-| (Names: '|':_UIBackdropContentView:0x7fb6a2a02310)>", 
    "<NSLayoutConstraint:0x7fb6a29649a0 H:|-(0)-[_UIBackdropView:0x7fb6a053bf90] (Names: '|':UIView:0x7fb6a0549220)>", 
    "<NSLayoutConstraint:0x7fb6a298b8a0 H:[_UIBackdropView:0x7fb6a053bf90]-(0)-| (Names: '|':UIView:0x7fb6a0549220)>", 
    "<NSLayoutConstraint:0x7fb6a296f440 H:|-(0)-[UIView:0x7fb6a0549220] (Names: '|':AVAlphaUpdatingView:0x7fb6a053dae0)>", 
    "<NSLayoutConstraint:0x7fb6a296f490 H:[UIView:0x7fb6a0549220]-(0)-| (Names: '|':AVAlphaUpdatingView:0x7fb6a053dae0)>", 
    "<NSLayoutConstraint:0x7fb6a2a40cc0 'UIView-Encapsulated-Layout-Width' H:[AVAlphaUpdatingView:0x7fb6a053dae0(0)]>" 
) 

प्रारंभिक दृष्टिकोण के बाद, मैं गलत पर translatesAutoresizingMaskIntoConstraints स्थापित करने के साथ videoPlayerController's दृश्य पर autolayout स्थापित करने के लिए कोशिश की। लेकिन मुद्दा अभी भी जारी है। मैं इन मुद्दों को कैसे ठीक कर सकता हूं?

+0

डुप्लिकेट: http://stackoverflow.com/q/32860362/2415822 – JAL

उत्तर

-1

समस्या यह है कि आप showsPlaybackControls = true स्थापित करने के लिए जब अपने AVPlayerController परदे पर है की कोशिश कर रहा है। ऐसा करने से सिस्टम UI तत्व बनते हैं, जो ऑटो लेआउट समस्याओं को जन्म देता है।

डॉक्स इस बात के बारे में बहुत विशिष्ट हैं: जबकि खिलाड़ी दृश्य नियंत्रक, परदे पर है ऐसा करने से बनाता है या UI तत्व नष्ट कर देता है क्योंकि

इस संपत्ति का उपयोग न करें प्लेबैक नियंत्रण की दृश्यता को बदलने के लिए।

लिंक: https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVPlayerViewController_Class/#//apple_ref/occ/instp/AVPlayerViewController/showsPlaybackControls

+0

@ एबीआईडी ​​मुझे एक ही समस्या का सामना करना पड़ रहा है। क्या आपको कोई समाधान मिला है? –

+0

मैं एक AVPlayerViewController उदाहरण बनाया और किसी दृश्य पर तो जैसे कहा: movieplayer = AVPlayerViewController.init() movieplayer .allowsPictureInPicturePlayback = false movieplayer .showsPlaybackControls = सच movieplayer .player = AVPlayer.init (यूआरएल??: ! आइटम .mediaURL) movieplayer .view.translatesAutoresizingMaskIntoConstraints = false contentView.addSubview (movieplayer .view) movieplayer .view.pinAllAnchors (करने के लिए:!?! contentView) '' ' मैं अभी भी ऑटो लेआउट समस्या दिखाई देती है जब मैं पूर्णस्क्रीन और पीछे जाओ। –

0

इस कोड का प्रयोग करें,

viewDidLoad विधि:

 let type : String! = "mp4" 
     let targetURL : String? = NSBundle.mainBundle().pathForResource("Welcome", ofType: type) 

     let videoURL = NSURL(fileURLWithPath:targetURL!) 


     let player = AVPlayer(URL: videoURL) 
     let playerController = AVPlayerViewController() 

     playerController.player = player 
     self.addChildViewController(playerController) 
     self.playView.addSubview(playerController.view) 
     playerController.view.frame = playView.bounds 

     player.play() 

और मेरे स्टोरीबोर्ड देखें नीचे देना है,

enter image description here

मैं बनाने UIView, फिर शीर्ष निर्धारित किया है, बाएं, दाएं और ऊंचाई को हल करें। इसकी मेरे लिए काम कर

आशा है कि इसकी सहायक

+0

नहीं। मैं पहले से ही इन सभी चीजों को एक अलग क्रम में कर रहा हूं। केवल अंतर यह है कि मेरी प्लेयर व्यू की ऊंचाई ViewController के दृश्य के आनुपातिक है। वीडियो सुचारू रूप से चलता है। केवल समस्या तब होती है जब आप AVPlayerViewCOntroller के देशी नियंत्रण को अपने शो प्लेबैक नियंत्रण गुण को सेट करके सत्य दिखाने का प्रयास करते हैं। और अब यदि आप इन नियंत्रणों का उपयोग करके पूर्ण स्क्रीन में जाने का प्रयास करते हैं तो Autolayout लॉग कंसोल पर मुद्रित हो जाता है। –

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