2015-05-04 67 views
-1

因此,我得到了一套在另一套裏面的戒指。我希望能夠進行縮放,並且,當我縮小足夠的距離時,縮放應該使動畫處於動畫狀態,然後再繼續縮放。在放大時播放「卡入/彈出」動畫,縮小

我已經做了變焦部很容易地使用CGAffineTransform和UIPinchGesture識別,這裏是尺度方法的樣子:

func scale(gesture: UIPinchGestureRecognizer) { 
    if !animationInProgress { 
     for var i = 0; i < scrollViews.count; i++ { 
      var view = scrollViews[i] 
      var j = 0 
      for ; j < scrollViews.count; j++ { 
       if view == scrollViews[j] { 
        break 
       } 
      } 
      println("Animation in progress: \(animationInProgress)") 

      if view.frame.origin.x < -80 || view.frame.origin.y < -140 { 
       if !view.hidden { 
        currentViewIndex = j + 1 
        view.hidden = true 
        view.visible = false 
        println("new view got out of the screen") 
        snapIn = true 
        animateSnap(snapIn) 
       } 
      } else { 
       if view.hidden == true { 
        currentViewIndex = j 
        view.hidden = false 
        view.visible = true 
        println("new view got into the screen") 
        snapIn = false 
        animateSnap(snapIn) 
       } 
      } 
      view.transform = CGAffineTransformScale(view.transform, gesture.scale, gesture.scale) 
      println("transformed") 
     } 
     gesture.scale = 1 
    } 
} 

所以我們從我們的觀點迭代中,frame.origin x和y檢查,視圖是否在屏幕之外,並且我設置了一些標誌,一些計算結果。

這個想法如下,當一個圓圈離開屏幕,其餘的動畫放大和縮小,當新的視圖到達屏幕上。

這裏是一個animateSnap功能:

private func animateSnap(snapIn: Bool) { 
    let factor: CGFloat = snapIn ? 1.5 : 0.5 
    for var a = currentViewIndex; a < scrollViews.count; a++ { 
     let next = scrollViews[a] 
     var transformAnimation = CABasicAnimation(keyPath: "transform") 
     transformAnimation.duration = 1 
     transformAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) 
     transformAnimation.removedOnCompletion = false 
     transformAnimation.fillMode = kCAFillModeForwards 
     transformAnimation.delegate = self 
     let transform = CATransform3DScale(next.layer.transform, factor, factor, 1) 
     transformAnimation.toValue = NSValue(CATransform3D:transform) 
     next.layer.addAnimation(transformAnimation, forKey: "transform") 
    } 
} 

的問題是:是否有人知道一個優雅的解決這個或看到我的做法任何缺陷?問題發生在動畫結束時,視圖有時會回到他們開始的位置。我不知道爲什麼,因爲完成刪除設置爲false。另外,我能用CGAffineTransform進行縮放和CATransform3D會不會影響結果?

非常感謝!

+0

」另外,我用CGAffineTransform進行縮放和CATransform3D會不會影響結果呢?「這就是爲什麼它沒有按預定方式行事的確切原因。通過使用CGAffineTransform和UIView.animateWithDuration()解決了這個問題,我希望它能幫助某人。 –

回答

-1

對於每個可能遇到相同問題的人,當您使用2D工作時,請使用CGAffineTransform而不是CATransform3D。這解決了問題,另外我懷疑它們也改變了不同的東西(例如,CATransform3D改變層),這就是爲什麼當動畫結束時結果看起來不像預期的那樣。 「