2017-02-02 1 views
2

У меня есть приложение iOS с двумя способами изменения и навигации между диспетчерами, первый способ - использование push/pop с контроллером навигации, а второй - настраиваемый способ перехода с использованием Пользовательский Контейнер View Controller из яблочной документации,Проблема с замораживанием iOS при смене контроллеров просмотров

здесь экран раскадровки выстрел:

enter image description here

и в ViewController.swift:

var contentViewController: UIViewController! { 
    didSet { 
     // remove any previous views 
     for view in self.contentView.subviews { 
      view.removeFromSuperview() 
     } 

     // add the view 
     // the ViewController must be aded to the children list to avoid being released (as it become a Zombie) 
     self.addChildViewController(self.contentViewController) 

     if registerDoneFlag { 

      //do some animation 
      let animation = CATransition() 
      animation.duration = 0.3 
      animation.type = kCATransitionPush 
      animation.subtype = kCATransitionFromTop 
      animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) 

      self.contentView.layer.addAnimation(animation, forKey: "SwitchToView1") 

      registerDoneFlag = false 
     } 
     if backFlag { 

      //do some animation 
      let animation = CATransition() 
      animation.duration = 0.3 
      animation.type = kCATransitionPush 
      animation.subtype = kCATransitionFromBottom 
      animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) 

      self.contentView.layer.addAnimation(animation, forKey: "SwitchToView1") 

      backFlag = false 
     } 

     self.contentView.addSubview(self.contentViewController.view) 
     self.contentViewController.didMoveToParentViewController(self) 
    } 
} 

и мы делаем эти анимации в начале приложения:

func upperViewAnimation() { 

    contianerTop.constant = 0 
    UIView.animateWithDuration(0.45, animations: {() -> Void in 

     self.view.layoutIfNeeded() 

     }, completion:{(finished) in 

      if finished { 

       if noInternetConnection && !noInternetConnectionPopup { 

        if isiPadFlag { 

         self.noConnectionViewHeight.constant = 60 
        } 
        else { 

         self.noConnectionViewHeight.constant = 50 
        } 

        UIView.animateWithDuration(0.3, animations: { 

         self.view.layoutIfNeeded() 
        }) 

        noInternetConnectionPopup = true 

        openNoInternetConnection() 

       } 
       else if noInternetConnection { 

        if isiPadFlag { 

         self.noConnectionViewHeight.constant = 60 
        } 
        else { 

         self.noConnectionViewHeight.constant = 50 
        } 

        UIView.animateWithDuration(0.3, animations: { 

         self.view.layoutIfNeeded() 
        }) 

       } 
       else { 

        self.noConnectionViewHeight.constant = 0 

        UIView.animateWithDuration(0.3, animations: { 

         self.view.layoutIfNeeded() 

         }, completion: { (finished) in 

          self.pullToRefreshAction() 

        }) 


       } 

       self.notificationButtonAnimationAndMenuButton() 
       self.moreAppsLabel.hidden = false 
      } 

    }) 

    //self.notificationButtonAnimationAndMenuButton() 

} 

каждая вещь работает отлично, за исключением в некоторых случаях приложение входит в проводных ситуациях замораживания, навигационный способ работы fine (push/pop), но измененный способ управления просмотром вообще не работает даже приложение выполняет выполненный набор contentViewController, но не делает никаких изменений с приложением

ответ

0

Я видел подобное поведение, когда основной поток был задействован для выполнения серв лёд/веб-запросы во время полного процесса загрузки.

+0

привет благодарю вас за ответ, но что вы подразумеваете под «во время полного процесса загрузки» :) –

Смежные вопросы