[譯]《Motion Design for iOS》(三十六)

現在讓我們添加我們的行。它們也都是UIImageView,所以也只用直接在背景圖片上放置就可以了。

// Katy Perry 行
UIImageView *firstRow =
    [[UIImageView alloc] initWithFrame:CGRectMake(0, 170, windowWidth, 80)];
firstRow.image = [UIImage imageNamed:@"1st-row"];
[self.window addSubview:firstRow];

// Shakira 行
UIImageView *secondRow =
    [[UIImageView alloc] initWithFrame:CGRectMake(0, 170+80, windowWidth, 80)];
secondRow.image = [UIImage imageNamed:@"2nd-row"];
[self.window addSubview:secondRow];

// Pitbull 行
UIImageView *thirdRow =
    [[UIImageView alloc] initWithFrame:CGRectMake(0, 170+160, windowWidth, 80)];
thirdRow.image = [UIImage imageNamed:@"3rd-row"];
[self.window addSubview:thirdRow];

// Lana del Rey 行
UIImageView *fourthRow =
    [[UIImageView alloc] initWithFrame:CGRectMake(0, 170+240, windowWidth, 80)];
fourthRow.image = [UIImage imageNamed:@"4th-row"];
[self.window addSubview:fourthRow];

// HEX 行
UIImageView *fifthRow =
    [[UIImageView alloc] initWithFrame:CGRectMake(0, 170+320, windowWidth, 80)];
fifthRow.image = [UIImage imageNamed:@"5th-row"];
[self.window addSubview:fifthRow];

你可能注意到每一行frame的Y坐標(垂直位置)都有一個小方程式。每一行都是80px高,所以放置它們每一行的時候我都在Y坐標上加了80。我也可以使用Auto Layout來做,但對這個例子來說就有點過于復雜了。

這里是在添加動畫前的樣子。


image

但等一下,我們并不想要在第一次進入的看到這樣的界面。這次練習的目的在于讓每個元素都動畫到它們的位置上,也就是說它們不應該立即出現在它們的最終位置。我要做的是從屏幕的右邊開始每一個元素,然后我會讓每個元素的左邊動畫到屏幕的左邊,來到最終的位置。

讓我們回到我們的視圖設置代碼并修改每個元素的frame,這樣它們的X軸坐標就不再是0了,而是屏幕的寬度。這樣就會讓每個元素的左邊界并齊屏幕的右邊界,用戶就看不到了。

// 添加箭頭和頂部的文字
UIImageView *arrowView =
   [[UIImageView alloc] initWithFrame:CGRectMake(windowWidth, 0, windowWidth, 45)];
arrowView.image = [UIImage imageNamed:@"arrow"];
[self.window addSubview:arrowView];

// Ministry of Fun 文字
UIImageView *ministryView =
    [[UIImageView alloc] initWithFrame:CGRectMake(windowWidth, 57, windowWidth, 56/2)];
ministryView.image = [UIImage imageNamed:@"ministry"];
[self.window addSubview:ministryView];

// Add a Song 按鈕
UIButton *addButton = [UIButton buttonWithType:UIButtonTypeCustom];
[addButton setImage:[UIImage imageNamed:@"add-button"]
    forState:UIControlStateNormal];
[addButton setImage:[UIImage imageNamed:@"add-button-pressed"]
    forState:UIControlStateHighlighted];
[addButton setFrame:CGRectMake(windowWidth, 102, windowWidth, 45)];
[self.window addSubview:addButton];

// Katy Perry 行
UIImageView *firstRow =
    [[UIImageView alloc] initWithFrame:CGRectMake(windowWidth, 170, windowWidth, 80)];
firstRow.image = [UIImage imageNamed:@"1st-row"];
[self.window addSubview:firstRow];

// Shakira 行
UIImageView *secondRow =
    [[UIImageView alloc] initWithFrame:CGRectMake(windowWidth, 170+80, windowWidth, 80)];
secondRow.image = [UIImage imageNamed:@"2nd-row"];
[self.window addSubview:secondRow];

// Pitbull 行
UIImageView *thirdRow =
    [[UIImageView alloc] initWithFrame:CGRectMake(windowWidth, 170+160, windowWidth, 80)];
thirdRow.image = [UIImage imageNamed:@"3rd-row"];
[self.window addSubview:thirdRow];

// Lana del Rey 行
UIImageView *fourthRow =
    [[UIImageView alloc] initWithFrame:CGRectMake(windowWidth, 170+240, windowWidth, 80)];
fourthRow.image = [UIImage imageNamed:@"4th-row"];
[self.window addSubview:fourthRow];

// HEX 行
UIImageView *fifthRow =
    [[UIImageView alloc] initWithFrame:CGRectMake(windowWidth, 170+320, windowWidth, 80)];
fifthRow.image = [UIImage imageNamed:@"5th-row"];
[self.window addSubview:fifthRow];

你可以想象一下現在所有元素都移動到屏幕的右邊去的界面樣式,現在只顯示了背景圖片。

現在所有內容都在屏幕外并且準備好動畫了,策略是讓每個元素都動畫到左邊,一次一個,每個都有所延遲,這樣就會產生一種波浪的感覺。為了好玩,我們試試使用基于block的UIView動畫方法來讓我們的元素動畫到屏幕上。

這里是第一個動畫block,我們會將箭頭和“Dance Club”圖片滑動到左邊。

[UIView animateWithDuration:1.1 delay:0 usingSpringWithDamping:0.3
    initialSpringVelocity:0 options:0 animations:^{
    [arrowView setFrame:CGRectMake(0, 0, windowWidth, 45)];
} completion:NULL];

這個基于block的動畫有1.1秒的持續時間和0.3的彈簧阻尼。持續時間是動畫完成需要的時間,而阻尼是iOS 7在UIView動畫方法中提供的一個彈簧屬性,用來控制彈簧的彈力。JNWSpringAnimation提供了三個屬性來控制彈簧的物理性質,但Apple值提供了一個,即damping屬性。damping需要時一個0到1之間的值,越接近0,彈簧動作就越有彈性,越接近1,就越沒有彈性,直到完全沒有彈性,變成一個平滑的淡入。

讓我們看看這個duration和damping值產生的動作。


image

恩,有點不太對。動畫太快也太跳躍了。這種類型的彈性動畫帶來了一些焦慮。這是一個關于僅僅使用一個彈簧動畫并不能提升你的app整體用戶體驗的很好的例子。每種類型的動畫都給你的用戶帶來了一些感受,而這個帶來了錯誤地感受。

讓我們將持續時間提升到2.1秒并看看感覺。


image

比起Jakub的原始動畫,這個又太彈了,我們的damping值也需要調整。讓我們將damping從0.3提升到0.6,如我之前所說,它更靠近1這個不彈的值。我們還是需要一點彈性,現在讓我們來看看它怎么樣了。


image

好了,不是太壞。你可以發現當你使用iOS 7提供的彈簧動畫方法時,它直接提供了一些值來獲取你想要的感覺。NSWSpringAnimation給出的彈簧屬性更容易理解,至少對我來說是這樣,因為它們都操作了彈簧動作方程的不同屬性。iOS 7的基于block的動畫中的damping值實際上是一個解釋值,這意味著蘋果無論獲取到你輸入的什么值,都會做一些復雜的計算來操作這個值并將其放入彈簧動作方程式中。你可以說蘋果操作了這個值,因為它在0和1之間改變彈性。而在實際的彈簧動作方程中,動作的時間(它到達平衡點或者最終位置的時間)是由彈簧的其他屬性決定的,它不是你去設置然后強制彈簧遵循的。蘋果的動畫方法有一個你需要設置的持續時間,所以你在以一種并非完全遵循物理法則管理下的彈簧動作。這就是為什么我傾向于用JSWSpringAniamtion(或者Facebook Pop,我會馬上提及),因為它們有著更加自然、逼真的彈簧動畫。

查看完整合集(喜歡請打星~):https://github.com/Cloudox/Motion-Design-for-iOS


查看作者首頁

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容

  • 動畫翻譯3 自然的動畫 可以使用標準的時間曲線,但那并不是最優方案,并且不一定會帶給用戶令人贊嘆和愉悅的感覺,因為...
    SHChen閱讀 734評論 0 2
  • Jakub設計的音樂播放器動畫效果 Jakub是一名來自Slovakia的出色的設計師并且在Dribbble上傳了...
    SHChen閱讀 853評論 5 9
  • 即使這些動畫可以通過一個淡出動畫曲線來完成,我也想使用含有相同damping和stiffness值得彈簧動畫,這樣...
    Cloudox_閱讀 156評論 0 0
  • 選擇qi:是表達式 標簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    love2013閱讀 2,326評論 0 11
  • 第8章古代木構建筑的特征與詳部演變 一、臺基、踏道、欄桿、鋪地 1.臺基依照使用功能和外形,大體可分為普通臺基和須...
    槑槑啊閱讀 2,297評論 0 1