從iOS 7中的彈簧動(dòng)畫開始
從iOS 7開始,蘋果在他現(xiàn)有的一套動(dòng)畫方法中添加了類彈簧的動(dòng)畫能力。實(shí)際上,他們還添加了很多東西;他們的UIKit Dynamics 框架是一個(gè)整合到了UIKit中的完整的物理引擎,允許你添加地心引力、彈簧附著、動(dòng)力等到你的界面元素中。
讓我們看看一個(gè)iOS 7中介紹的更改了的基于block的動(dòng)畫方法,它現(xiàn)在增加了一些額外的參數(shù)來實(shí)現(xiàn)類彈簧動(dòng)畫。這個(gè)是我們動(dòng)畫代碼的更改。
UIView *redBall = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 100, 100)];
redBall.backgroundColor = [UIColor redColor];
redBall.layer.cornerRadius = 50;
[self.window addSubview:redBall];
[UIView animateWithDuration:3 delay:0 usingSpringWithDamping:.3
initialSpringVelocity:0 options:0 animations:^{
redBall.transform = CGAffineTransformMakeTranslation(300, 0);
} completion:NULL];
哇,這是一個(gè)長(zhǎng)方法!如你所見,有一些我們之前的例子里沒有的額外的參數(shù)在方法中調(diào)用了。參數(shù)包括彈簧阻尼和初始彈簧速度。彈簧阻尼是一個(gè)0到1之間的值,1模仿一個(gè)沒有震蕩的過阻尼彈簧系統(tǒng),0表示很有彈力的欠阻尼系統(tǒng)。速度參數(shù)用來定義物體開始的快慢,當(dāng)你使用手勢(shì)用于用戶在屏幕上滑動(dòng)手指持續(xù)一個(gè)物體的移動(dòng)的時(shí)候會(huì)非常有用。
在我們的例子中我們?cè)O(shè)置阻尼為0.3(有點(diǎn)彈性),因?yàn)槲覀兪怯梦矬w靜止開始的所以速度為0。因?yàn)閺梽?dòng)會(huì)使時(shí)間變長(zhǎng)所以我們也增加了持續(xù)時(shí)間。
就我個(gè)人來說,我不認(rèn)為iOS 7中使用了新block方法的彈簧動(dòng)畫如我所愿地平滑移動(dòng),當(dāng)你想要完善動(dòng)作時(shí)他們也沒有提供足夠的彈簧屬性來操作。還有,如果你在創(chuàng)建一個(gè)地圖app并想要使用這些UIKit Dynamics中的彈簧動(dòng)作將是不幸的。如果你的app還需要支持iOS 7之前的版本怎么辦?你也是不幸的,因?yàn)閁IKit Dynamics直到iOS 7才出現(xiàn)并且不能用于之前的版本中。
所以還有什么別的方式可以創(chuàng)建自然的動(dòng)作、類彈簧的動(dòng)畫呢?其他的可選項(xiàng)是什么?幸運(yùn)的是,我認(rèn)為有兩個(gè)非常好的UIKit Dynamics的替代方式可以解決我上面列出的關(guān)于調(diào)整屬性和不修改太多就能在iOS 6以及Mac OS X上工作的所有問題。我是下面給兩個(gè)框架的鐵桿粉絲,并且在我已發(fā)布和未來開發(fā)的app上廣泛地使用它們。
這兩個(gè)框架是JNWSpringAnimation
和Pop by Facebook
。
查看完整合集:https://github.com/Cloudox/Motion-Design-for-iOS