我的iPad應用程序有一個頁面需要使用UIDynamicAnimator進行開發。我在下面添加了一段代碼。它根據我的需要在iOS8中完美工作,但在iOS7上失敗。當強制更改框架彈跳時,我不會重複呼叫委託。UIDynamicAnimator in swift ios 7
private var bounceCount:Int = 0
private var animator:UIDynamicAnimator!
private var animateWithBounce:Bool = Yes
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
// Do any additional setup.
if(self.animateWithBounce==Yes) {
self.hideAnimationViews()
var rect:CGRect = self.bounceView.frame
rect.origin.y = 319
self.bounceView.frame = rect
self.bounceCount = 0
var animator:UIDynamicAnimator = UIDynamicAnimator(referenceView: self.bounceContainerView)
var gravityBehavior:UIGravityBehavior = UIGravityBehavior(items: [self.bounceView])
gravityBehavior.gravityDirection = CGVector(dx: 0.0, dy: -1.0)
gravityBehavior.magnitude = 1.0
animator.addBehavior(gravityBehavior)
var collisionBehavior:UICollisionBehavior = UICollisionBehavior(items: [self.bounceView])
collisionBehavior.translatesReferenceBoundsIntoBoundary = Yes;
collisionBehavior.collisionDelegate = self;
animator.addBehavior(collisionBehavior)
var elasticityBehavior:UIDynamicItemBehavior = UIDynamicItemBehavior(items: [self.bounceView])
elasticityBehavior.elasticity = 0.8;
animator.addBehavior(elasticityBehavior)
self.animator = animator
}
}
// MARK: - UICollisionBehaviorDelegate methods
func collisionBehavior(behavior: UICollisionBehavior, endedContactForItem item: UIDynamicItem, withBoundaryIdentifier identifier: NSCopying) {
var rect:CGRect = self.bounceView.frame
if(self.bounceCount==0) {
rect.origin.y = 79.25
}
else if(self.bounceCount==1) {
rect.origin.y = 19.25
}
else if(self.bounceCount==2) {
rect.origin.y = 09.25
}
else if(self.bounceCount==3) {
self.startAnimationOnViews()
}
self.bounceView.frame = rect
bounceCount = bounceCount+1
}
// MARK: -
private func hideAnimationViews()
{
//some views hided here
}
private func startAnimationOnViews()
{
UIView.animateKeyframesWithDuration(duration, delay: delay, options: options, animations: {
UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: time1, animations: {
//some views showing on first time slot
})
UIView.addKeyframeWithRelativeStartTime(time1, relativeDuration: time2, animations: {
//some views showing on second time slot
})
}, completion: {finished in
//recursive call
})
}
我正在使用XCode 6.1.0,與iOS7的應用程序兼容性。基地SDK的iOS 8.1
var Yes:Bool { return true }
var No:Bool { return false }
這些像宏或一些應用在全球範圍內共享以提高可讀性
感謝支持提前。
你的代碼看起來很好(顯然)。你能否展示失敗的部分? – matt 2014-11-21 13:53:20
故障部件位於collisionDelegate。我根據自己的需要多次改變了視圖的框架。代表不在使用ios7快速調用。 :(但與ios8很好,希望你有我的問題,謝謝你... – imalvare 2014-11-21 14:12:09
好的,我會再說一遍_Show實際的代碼,你認爲是失敗._我願意複製,粘貼和測試你的代碼適合你,但是我不會從頭開始編寫我自己的代碼,只是爲了幫助你。 – matt 2014-11-21 14:17:49