程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> Swift說話完成地圖坐標彈跳動畫

Swift說話完成地圖坐標彈跳動畫

編輯:更多關於編程

Swift說話完成地圖坐標彈跳動畫。本站提示廣大學習愛好者:(Swift說話完成地圖坐標彈跳動畫)文章只能為提供參考,不一定能成為您想要的結果。以下是Swift說話完成地圖坐標彈跳動畫正文


上面運用Swift說話做地圖坐標完成彈簧跳動的後果,詳細完成辦法以下所示:

iOS動畫年夜概分這幾種:

CoreAnimation動畫(基本)UIView動畫(animateWithDuration開首的函數,帶彈簧殊效)UIDynamic動畫(有物理引擎)

前次寫彈跳動畫,因為剛開端學,就用了最基本的CA動畫,然則由於本身不會寫KeyFrame,所以還援用了一個開源庫來完成下墜的彈跳後果,如許雖然是完成了需求,然則一點都不優雅——從iOS7開端,有了2、3兩種動畫,就不再須要用老的CA動畫去一點一點拔了。做這個動畫的准確姿態,應當是上面如許~

我們的需求依然是這個彈跳的marker:

此次我用了2、3兩種方法完成,後果以下:

1、UIView動畫

之前應用CABasicAnimation完成,不只代碼多,還要用CATransaction掌握回來的一趟callback。其實直接用iOS7的UIView動畫就弄定了:

UIView.animateWithDuration(0.2, 
animations: 
{ self.marker.layer.position.y -= 30 },
completion: {(finished) in UIView.animateWithDuration(0.5, delay: 0,
usingSpringWithDamping: 0.2,
initialSpringVelocity: 5.0,
options: UIViewAnimationOptions.CurveEaseOut,
animations: {//彈性參數的調教,可以拜見本文的“參考”部門 
self.marker.layer.position.y += 30 }, 
completion: nil)})

在上升進程中,直接在0.2s的時光中,向上挪動30px;向下進程中,為了表現彈跳的後果,應用了Spring系列參數,做了一下調劑以後,感到後果照樣挺成心思的。然則純真應用這個有一個缺陷:我們要的是相似於重力下墜,而非像一根彈簧一樣彈到誰人地位。留意那跟藍色的比擬線,我們完成的是右邊的後果,在動畫進程中,它會跨越那根藍色線條,所以實際上是不相符需求的。

2、UIDynamic動畫

UIDynamic動畫是有物理引擎的動畫,我們只須要設定這個“物體”的物理特征,iOS就會主動幫我們停止物理世界的動畫運算。起首我們創立它的物理特征:

var animator : UIDynamicAnimator?override func viewDidLoad() { 
super.viewDidLoad() 
animator = UIDynamicAnimator(referenceView: view)}
override func viewDidAppear(animated: Bool) { 
let gravity = UIGravityBehavior(items: [marker2])//重力 
let elastic = UIDynamicItemBehavior(items: [marker2])//彈性 
elastic.elasticity = 0.6 let collision = UICollisionBehavior(items: [marker2])//邊沿 
let endY = marker2.frame.origin.y + marker2.frame.height//
記載marker2的底部坐標 
collision.addBoundaryWithIdentifier("floor", fromPoint: CGPoint(x: 0, y: endY),
toPoint: CGPoint(x: UIScreen.mainScreen().bounds.width, y: endY))//在marker2的底部畫一條線,從屏幕右邊到屏幕左邊 
animator!.addBehavior(collision) 
animator!.addBehavior(gravity) 
animator!.addBehavior(elastic)}


起首我們創立一個animator,然後創立關於marker2的重力、彈性、邊沿三個屬性,附加在animator上。因而這個marker2便有了物理特征。然後我們和之前一樣把它舉高:

UIView.animateWithDuration(0.2, 
animations: { 
self.marker2.layer.position.y -= 30 }, 
completion: {(finished : Bool) in 
self.animator!.updateItemUsingCurrentState(self.marker2)//假如不update,則animator不曉得它的地位被挪動過了})

在動畫完成後,讓animator從新對它停止運動,就到達了文章開端的gif圖中,第二個marker的彈跳後果。

文章到此為止,願望對年夜家有所贊助,感謝。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved