2016-03-23 8 views
0

Bir slayt görünümünde bir koleksiyon görünümüne ve iki kapsayıcı görünümüne sahibim (menülere çağrı yapalım). Menugrid kaydırıldığında, çerçeve tüm ekranı kaplayacak şekilde ayarlanır. Bir kullanıcının bir UICollectionView hücresini kapsayıcı görünümüne sürükleyip bırakabileceği bir işlev oluşturmaya çalışıyorum. Sürükle bırakmaya başladığımda, menugrid görünümü ekranın alt kısmında bulunan başlangıç ​​konumuna geri döner.Swift: Bir alt görünüm eklendiğinde görüntünün çerçevesi değişiyor

func handlePanForCell(gestureRecognizer: UILongPressGestureRecognizer) { 

     let pressPoint: CGPoint = gestureRecognizer.locationInView(gestureRecognizer.view) 
     let localPoint : CGPoint = self.menuGridView.convertPoint(pressPoint, fromView: gestureRecognizer.view!) 
     var cell : MenugridCollectionViewCell = MenugridCollectionViewCell() 
     if(gestureRecognizer.view is UICollectionViewCell){ 
      if (gestureRecognizer.state == UIGestureRecognizerState.Began) { 
       cell = gestureRecognizer.view as! MenugridCollectionViewCell 
       UIGraphicsBeginImageContext(cell.bounds.size); 
       cell.layer.renderInContext(UIGraphicsGetCurrentContext()!) 
       let cellImage : UIImage = UIGraphicsGetImageFromCurrentImageContext(); 
       UIGraphicsEndImageContext(); 
       self.movingCell = UIImageView.init(image: cellImage) 
       self.movingCell?.alpha = 0.75 
       //let cellFrameInSuperview : CGRect = self.menuGridCollectionView.convertRect(cell.frame, toView: self.menuGridView) 
       self.movingCell?.center = localPoint 
       //self.movingCell?.frame = cellFrameInSuperview 
       self.view.addSubview(self.movingCell!) 
      } 
      if (gestureRecognizer.state == UIGestureRecognizerState.Changed) { 
       self.movingCell?.center = localPoint 
       setMenuGridViewOnTop() 
      } 
      if (gestureRecognizer.state == UIGestureRecognizerState.Ended) { 

       // Check to see if the drop area is in the personalized info-area 
       let isContaining = self.menuGridView.convertRect(self.firstContainerView.frame, toView: self.menuGridView).contains(self.movingCell!.frame) || self.middleView.convertRect(self.secondInfoView.frame, toView: self.menuGridView).contains(self.movingCell!.frame) 
       if isContaining 
       { 
        if(self.middleView.convertRect(self.firstInfoView.frame, toView: self.view).contains(self.movingCell!.frame)) { 
         //let index = self.findIndexOfViewController(self.infoViewArray[0]) 
         //let oldViewController : UIViewController = self.childViewControllers[Int(index)] as UIViewController 
         self.switchInfoViews(nil, toView: (gestureRecognizer.view as! MenugridCollectionViewCell).name!, atPosition: 0, parentView: "menuGridView") 
        } 
        else { 
         self.switchInfoViews(nil, toView: (gestureRecognizer.view as! MenugridCollectionViewCell).name!, atPosition: 1, parentView: "menuGridView") 
        } 
        //self.movingCell?.removeFromSuperview() 
       } 
       self.movingCell?.removeFromSuperview() 
       self.movingCell = nil 
       //setMenuGridViewOnTop() 

       //self.view.viewWithTag(1000)?.removeFromSuperview() 
       //self.view.viewWithTag(1001)?.removeFromSuperview() 
       //self.middleView.alpha = 1 
       //self.childViewControllers[0].view.alpha = 1 
       //self.childViewControllers[1].view.alpha = 1 
       //self.topView.alpha = 1 
      } 
     } 
     //setMenuGridViewOnTop() 
    } 



//MARK: - Switch Views 
    func switchInfoViews(fromViewController : UIViewController?, toView : String, atPosition : CGFloat, parentView : String) { 

     var newViewController : InfoViewController = InfoViewController() 
     var storyBoardIdOfNewView = String() 
     if(toView == "Doctor"){ 
      newViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("ProviderSearchInfoViewControllerID") as! ProviderSearchInfoViewController 
      storyBoardIdOfNewView = "ProviderSearchInfoViewControllerID" 
     } 
     else if(toView == "PayBill"){ 
      newViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("PayBillInfoViewControllerID") as! PayBillInfoViewController 
      storyBoardIdOfNewView = "PayBillInfoViewControllerID" 
     } 
     else if(toView == "Symptoms"){ 
      newViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("SymptomsInfoViewControllerID") as! SymptomsInfoViewController 
      storyBoardIdOfNewView = "SymptomsInfoViewControllerID" 
     } 
     else if(toView == "Handouts"){ 
      newViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("PatientHandoutInfoViewControllerID") as! PatientHandoutInfoViewController 
      storyBoardIdOfNewView = "PatientHandoutInfoViewControllerID" 
     } 
     else if(toView == "FirstAid"){ 
      newViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("FirstAidInfoViewControllerID") as! FirstAidInfoViewController 
      storyBoardIdOfNewView = "FirstAidInfoViewControllerID" 
     } 

     if(parentView == "menuGridView") { 

       let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier(storyBoardIdOfNewView) 
       if(atPosition == 0){ 
        self.firstContainerView.subviews.forEach({ $0.removeFromSuperview() }) 
        viewController.view.frame = CGRectMake(0, 0, (self.menuGridView.frame.width/2) - 3, self.menuGridView.frame.height * 0.3)//self.firstContainerView.frame 
        self.firstContainerView.addSubview(viewController.view) 
       } 
       else { 
        self.secondContainerView.subviews.forEach({ $0.removeFromSuperview() }) 
        viewController.view.frame = CGRectMake(0, 0, (self.menuGridView.frame.width/2) - 3, self.menuGridView.frame.height * 0.3)//self.secondContainerView.frame 
        self.secondContainerView.addSubview(viewController.view) 
       } 
      if(self.menuAtTop){ 
       self.setMenuGridViewOnTop() 
      } 
      } 
      else if(parentView == "middleView"){ 

       if(!self.checkIfViewControllerIsAlreadyDisplayed(newViewController)) 
       { 
        fromViewController?.willMoveToParentViewController(nil) 
        fromViewController?.view.removeFromSuperview() 
        fromViewController?.removeFromParentViewController() 
        self.movingCell?.removeFromSuperview() 
        newViewController.view.frame = CGRectMake(0 + atPosition * self.middleView.frame.size.width/2, 0 , self.middleView.frame.size.width/2, self.middleView.frame.size.height) 
        self.middleView.addSubview(newViewController.view) 
        self.addChildViewController(newViewController) 
        newViewController.didMoveToParentViewController(self) 
        if(self.infoViewArray.count > 0) { 
         self.infoViewArray.removeAtIndex(Int(atPosition)) 
         self.infoViewArray.insert(toView, atIndex: Int(atPosition)) 
        } 
       } 
      } 
    } 

buna sebep ne olabilir: Burada

bazı kodudur? Bunun neden olacağına şaşırdım ve bununla ilgili her türlü yardımı takdir ediyorum. Teşekkür ederim.

+0

Görünümlerde otomatik düzen kümesi yok. Düzen, kod olarak ayarlanıyor. – userx

cevap

0

Projeden AutoLayout'u kaldırarak ve düzeni düzende kodlama yaparak sorunu çözdüm.

Bunun nedenini bilmek istiyorum, çünkü AutoLayout'u daha iyi anlamam için bana yardımcı olacaktı.

İlgili konular