2016-05-03 26 views
0

これまで、私はUIKitフレームワークの一部である属性に取り組んでいる限り、UIViewのアニメーションを使用しました。任意のUIView変数にアニメーションを設定できますか?

最近、いくつかのカレンダー/スケジューリングの動作を表示し、無限のスクロールをサポートするカスタムUIViewコントロールを作成しました。

var position = NSDate().mondayMorning() { 
    didSet { 
     self.setNeedsDisplay() 
    } 
} 

限りそのposition変更、物事がうまく動作するよう:どのようなスクロール位置を制御することは、私はそのように宣言しているしているシンプルなNSDate変数です。 UIPanGestureRecognizerでスクロールを設定することさえ簡単だった:

struct StartState { static var position:NSDate = NSDate() } 
switch pan.state { 
case .Began: 
    StartState.position = self.position 
case .Changed: 
    let translation = pan.translationInView(self).y 
    self.position = StartState.position - ((7 * 24).hours/self.cellWidth * translation) 
case .Cancelled: 
    self.position = StartState.position 
default: 
    break 
} 

私は.Endedケースでデカールの動きを実装しようとすると、トリッキーな部分が来ます。理想的には、ある種のUIView.animationWithDuration(... .CurveEaseOut)呪文を使いたいと思いますが、多くの試行錯誤にもかかわらず、私は何もできません。過去に私は自分のカスタムアイテムを作っていましたが、そのような場合はレイアウトが面倒だったので、アニメーションブロックをlayoutIfNeededにするだけですが、この場合は修正したいNSDate値を曲線に沿って移動し、その後の表示更新を駆動する。働いていた何かを見つけることができません、私は高校の物理学に頼って、私自身をした:

case .Ended: 
    let translation = pan.translationInView(self).y 
    let v = pan.velocityInView(self).y 
    let a:CGFloat = -4000.0 // 4 pixels/millisecond, recommended on gavedev 
    let travelTime = (v/a).abs.seconds 
    let started = NSDate() 
    let timer = Timer() 
    timer.interval = 40.milliseconds 
    timer.tick = { 
     let elapsed = NSDate() - started 
     if elapsed >= travelTime { 
      timer.stop() 
     } 
     else { 
      let decelDisplacement = (v.abs * CGFloat(elapsed.seconds.magnitude) + (a * 0.5 * CGFloat(elapsed.seconds.magnitude.squared))) * v.sign 
      self.position = StartState.position - ((7 * 24).hours/self.cellWidth * (translation + decelDisplacement)) 
     } 
    } 
    timer.start() 

は、これが動作します。しかし、ここでCoreAnimationを活用することができれば、私はしたいと思います。私はこれを行うことができる中間地はありますか?それとも、アニメーションの素材がすべて入っているのでしょうか?

答えて

0

CoreAnimationを使用せずにUIViewアニメーションAPIでこれを実行する方法はありません。確かにCoreAnimationででき、Appleはいくつかnice example code for thisを提供します。 an objc.io article about this topicもあります。

私は、UIViewアニメーションにはたらくthis solutionを見つけましたが、実際にはunderneath accomplishes this behaviour using CoreAnimationもREADMEに示唆されています。

関連する問題