2016-04-21 94 views
0

我的應用程序包含一個按鈕,它可以在您彈出「收藏夾」視圖時隱藏該視圖,並在您觸摸外部視圖時隱藏該視圖。動畫效果很好,直到touchesbegan功能被調用,然後它纔會淡入。在swift中運行addsubview命令後不會運行動畫

我的觸摸開始功能包括addsubview命令,並以某種方式似乎導致問題。
爲什麼在讀取addsubview命令後,我的「spring in」動畫無法工作?這是我的約束重置問題嗎?每次都會調用我的動畫塊。

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    let bgImage = UIImageView(image: processedImage) 
    self.viewArray.append(bgImage) 
} 

func showFilter(){ 
    view.bringSubviewToFront(collectionView) 
    var collectionViewPos = collectionView.center.x 
    self.collectionView.center.x = view.frame.width + 300 
    UIView.animateWithDuration(0.0, delay: 0.0, options: [], animations: {() -> Void in 
     self.collectionView.alpha = 1 
     }, completion: { (complete: Bool) in 

      UIView.animateWithDuration(1.0, delay: 0.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 10, options: [], animations: {() -> Void in 
       self.collectionView.center.x = collectionViewPos 
       self.view.layoutIfNeeded() 
       }, completion: nil) 
      return 
    }) 
} 

回答

0

我的問題與約束有關。我用這個問題的答案How do I animate a NSLayoutConstraint in Swift?來動畫約束變化而不是動作。它現在工作完美無瑕。

self.view.bringSubviewToFront(self.collectionView) 
    constraint.constant = constraint.constant + 300 
    UIView.animateWithDuration(1.0, delay: 0.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 10, options: [], animations: {() -> Void in 
     self.view.layoutIfNeeded() 
    }, completion: nil)