從iOS 7中的彈簧動(dòng)畫(huà)開(kāi)始
從iOS 7開(kāi)始撕瞧,蘋(píng)果在他現(xiàn)有的一套動(dòng)畫(huà)方法中添加了類彈簧的動(dòng)畫(huà)能力陵叽。實(shí)際上狞尔,他們還添加了很多東西;他們的UIKit Dynamics 框架是一個(gè)整合到了UIKit中的完整的物理引擎巩掺,允許你添加地心引力偏序、彈簧附著、動(dòng)力等到你的界面元素中胖替。
讓我們看看一個(gè)iOS 7中介紹的更改了的基于block的動(dòng)畫(huà)方法研儒,它現(xiàn)在增加了一些額外的參數(shù)來(lái)實(shí)現(xiàn)類彈簧動(dòng)畫(huà)。這個(gè)是我們動(dòng)畫(huà)代碼的更改独令。
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)方法!如你所見(jiàn)燃箭,有一些我們之前的例子里沒(méi)有的額外的參數(shù)在方法中調(diào)用了冲呢。參數(shù)包括彈簧阻尼和初始彈簧速度。彈簧阻尼是一個(gè)0到1之間的值遍膜,1模仿一個(gè)沒(méi)有震蕩的過(guò)阻尼彈簧系統(tǒng)碗硬,0表示很有彈力的欠阻尼系統(tǒng)。速度參數(shù)用來(lái)定義物體開(kāi)始的快慢瓢颅,當(dāng)你使用手勢(shì)用于用戶在屏幕上滑動(dòng)手指持續(xù)一個(gè)物體的移動(dòng)的時(shí)候會(huì)非常有用恩尾。
在我們的例子中我們?cè)O(shè)置阻尼為0.3(有點(diǎn)彈性),因?yàn)槲覀兪怯梦矬w靜止開(kāi)始的所以速度為0挽懦。因?yàn)閺梽?dòng)會(huì)使時(shí)間變長(zhǎng)所以我們也增加了持續(xù)時(shí)間翰意。
就我個(gè)人來(lái)說(shuō),我不認(rèn)為iOS 7中使用了新block方法的彈簧動(dòng)畫(huà)如我所愿地平滑移動(dòng)信柿,當(dāng)你想要完善動(dòng)作時(shí)他們也沒(méi)有提供足夠的彈簧屬性來(lái)操作冀偶。還有,如果你在創(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)畫(huà)呢?其他的可選項(xiàng)是什么漠吻?幸運(yùn)的是量瓜,我認(rèn)為有兩個(gè)非常好的UIKit Dynamics的替代方式可以解決我上面列出的關(guān)于調(diào)整屬性和不修改太多就能在iOS 6以及Mac OS X上工作的所有問(wèn)題。我是下面給兩個(gè)框架的鐵桿粉絲途乃,并且在我已發(fā)布和未來(lái)開(kāi)發(fā)的app上廣泛地使用它們绍傲。
這兩個(gè)框架是JNWSpringAnimation
和Pop by Facebook
。
查看完整合集:https://github.com/Cloudox/Motion-Design-for-iOS