動(dòng)畫一

IMG_2445.GIF

寫在前面的話

我個(gè)人感覺動(dòng)畫其實(shí)并不算難镶摘,但是也不算簡(jiǎn)單姥芥。因?yàn)橛兴囊恍┘记赏闷颉O啾扔诿嫦驅(qū)ο蟮拈_發(fā)(百度搜,替換內(nèi)容)這種可能是有一些難凉唐,因?yàn)樗沁^(guò)程式的庸追,要完整寫一份動(dòng)畫,需要費(fèi)一分心思台囱。

  • 難度分析

我對(duì)這篇文章的定位來(lái)說(shuō)淡溯,是給一個(gè)可能剛做界面的新人看,所以可能在結(jié)構(gòu)拆分上有些多(繁瑣)簿训,畢竟剛懂乘法口訣的人不可能很快的反應(yīng)出16 * 16 = 256咱娶。但是同時(shí),畢竟是在做動(dòng)畫强品,會(huì)淡化對(duì)語(yǔ)法膘侮,和一些基本類的使用說(shuō)明。

  • 動(dòng)畫拆分

這個(gè)應(yīng)該算是基本功择懂,也就是大象進(jìn)冰箱的事喻喳。很多動(dòng)畫乍一看很酷炫,其實(shí)是有很多基本的動(dòng)畫組合而成的困曙,即便是國(guó)外一些很優(yōu)秀的app上的動(dòng)畫表伦,也很少涉及復(fù)雜算法谦去,基本高中的數(shù)學(xué)知識(shí)就足夠了。
那我們具體說(shuō)上面的這個(gè)動(dòng)畫蹦哼,怎么拆鳄哭。
從整體上來(lái)看,它有一個(gè)滾動(dòng)的效果纲熏,可以用scrollView做妆丘,也可以考慮用collectionView,但是對(duì)于每一個(gè)item,我們觀察到還有后續(xù)的動(dòng)畫局劲,包括這種在切換的時(shí)候勺拣,主item,和側(cè)邊item的大小變化這種。
如果是單純的輪播器那種,scrollView應(yīng)該得心應(yīng)手,但是這種不是說(shuō)不可以窗轩,如果這樣用scrollView的話,你需要自定義大量的東西愤惰,剛好collectionView是可以省很多的事(畢竟collectionView抽象出layout這種東西),基于這樣的考慮我們決定用collectionView實(shí)現(xiàn)這樣滾動(dòng)的效果赘理。

  • 實(shí)踐

上面分析的需求確實(shí)是很簡(jiǎn)單宦言,但是我們也要做的有模有樣(考慮到后續(xù)的擴(kuò)展)
我推薦剛開始是按照老三樣來(lái)規(guī)規(guī)矩矩的先寫。
譬如對(duì)于模型商模,我們可能只是單純的放在Assets里面奠旺,但是也先獨(dú)立出來(lái)。

+ (NSArray <CardModel *> *)cardModel {
 
    NSMutableArray *arrM = [NSMutableArray array];
    
    for (NSInteger i = 1; i <= 6; i++) {
        
        CardModel *model = [[CardModel alloc] init];
        model.cardPicName = [NSString stringWithFormat:@"%ld",(long)i];
        [arrM addObject:model];
    }
    
    return arrM.copy;
}

然后開始處理collectionView的東西阻桅。這里面需要考慮基于后續(xù)的復(fù)雜度凉倚,我們把collectionView放在UIView上進(jìn)行處理(好像把UIView做控制器的意思兼都,當(dāng)然嫂沉,它不是)

///collectionView視圖
@property (nonatomic, strong) UICollectionView *collectionView;

///背景毛玻璃圖片
@property (nonatomic, strong) UIImageView *bgView;

///模型數(shù)組
@property (nonatomic, strong) NSArray <CardModel *> *imageArray;

我們?cè)诔跏蓟椒ɡ锩嫘枰龅木褪谦@取模型,初始UI

//初始化背景圖并附加毛玻璃效果
    self.BgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:self.imageArray[0].cardPicName]];
    UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
    UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect];
    effectView.frame = self.BgView.bounds;
    [self.BgView addSubview:effectView];
    
    //初始化collectionView
    CardFlowLayout *layout = [[CardFlowLayout alloc] init];
    self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight) collectionViewLayout:layout];
    self.collectionView.backgroundView = self.BgView;
    self.collectionView.dataSource = self;
    [self.collectionView registerClass:[CardCollectionViewCell class] forCellWithReuseIdentifier:CellId];
    [self addSubview:self.collectionView];

這上面有個(gè)需要說(shuō)明的地方就是layout,如果你僅僅是簡(jiǎn)單的使用collectionView完成橫/縱向排列這些簡(jiǎn)單的事情扮碧,完全可以把layout直接寫在collectionView里面趟章,而不需要單獨(dú)的去繼承,舉凡是繼承l(wèi)ayout,我們通常是要實(shí)現(xiàn)

- (nullable NSArray<__kindof UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect; // return an array layout attributes instances for all the views in the given rect
- (nullable UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath;
- (nullable UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath;

類似這些UICollectionViewFlowLayout父類的方法或代理(他們有很強(qiáng)大的功能)慎王,所以我們決定單獨(dú)的繼承l(wèi)ayout蚓土,當(dāng)然,現(xiàn)在它里面只是堆本身屬性的一些賦值

self.itemSize = CGSizeMake(ScreenWidth, ScreenHeight);
self.scrollDirection = UICollectionViewScrollDirectionHorizontal;   //水平方向
self.minimumLineSpacing = 0;

我在實(shí)驗(yàn)室的時(shí)候觀察到很多人是很少用collectionView的赖淤,其實(shí)和tableView很相似的蜀漆,我們也需要自定義一個(gè)cell。你可能看著那個(gè)卡片上劃下劃咱旱,還能點(diǎn)進(jìn)去的酷炫的樣子确丢,我們先不考慮绷耍。為什么呢,因?yàn)閯?dòng)畫是協(xié)同的鲜侥,我們盡可能的希望它能在一個(gè)水平線上褂始,進(jìn)行同步進(jìn)行,譬如我們的layout里面對(duì)于Item大小描函,就是上面談到的主崎苗,側(cè)item變化這種更前面的事還沒有考慮,就不要著急去考慮這個(gè)cell內(nèi)部的事情舀寓。所以可以事先的在里面放一個(gè)圖片就好胆数。

- (void)setupUI
{
    self.coverImageView = [[UIImageView alloc] init];
    //稍稍的精致一下(其實(shí)我是為了看collectionView后面那個(gè)蒙板)
    self.coverImageView.layer.cornerRadius = 8; //切個(gè)小圓角
    self.coverImageView.layer.masksToBounds = YES;
    self.coverImageView.frame = CGRectMake(0, 0, ScreenWidth, ScreenHeight);
    [self.contentView addSubview:self.coverImageView];
}

- (void)loadData:(NSString *)imageName
{
    self.coverImageView.image = [UIImage imageNamed:imageName];
}

這樣在collection的dataSource里面對(duì)接一下就好

CardCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellId forIndexPath:indexPath];
[cell loadData:self.imageArray[indexPath.row].cardPicName];

我把這樣定義為第一部分,很easy,手巧一點(diǎn)的新手也可以盲敲出來(lái)互墓。(這是一個(gè)好習(xí)慣幅慌,都說(shuō)程序員不看過(guò)程的,但是你自己做盡量還是對(duì)簡(jiǎn)單的事情可以做到手到擒來(lái)轰豆,這樣后續(xù)的壓力會(huì)小點(diǎn))胰伍,


Snip20180128_12.png

在下一篇要做的首先是優(yōu)化代碼結(jié)構(gòu),其次是完成卡片式的切換酸休。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末骂租,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子斑司,更是在濱河造成了極大的恐慌渗饮,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宿刮,死亡現(xiàn)場(chǎng)離奇詭異互站,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)僵缺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門胡桃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人磕潮,你說(shuō)我怎么就攤上這事翠胰。” “怎么了自脯?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵之景,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我膏潮,道長(zhǎng)锻狗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮轻纪,結(jié)果婚禮上脚囊,老公的妹妹穿的比我還像新娘。我一直安慰自己桐磁,他們只是感情好悔耘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著我擂,像睡著了一般衬以。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上校摩,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天看峻,我揣著相機(jī)與錄音,去河邊找鬼衙吩。 笑死互妓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坤塞。 我是一名探鬼主播冯勉,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼摹芙!你這毒婦竟也來(lái)了灼狰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤浮禾,失蹤者是張志新(化名)和其女友劉穎交胚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盈电,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蝴簇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匆帚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熬词。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖卷扮,靈堂內(nèi)的尸體忽然破棺而出荡澎,到底是詐尸還是另有隱情均践,我是刑警寧澤晤锹,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站彤委,受9級(jí)特大地震影響鞭铆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一车遂、第九天 我趴在偏房一處隱蔽的房頂上張望封断。 院中可真熱鬧,春花似錦舶担、人聲如沸坡疼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)柄瑰。三九已至,卻和暖如春剪况,著一層夾襖步出監(jiān)牢的瞬間教沾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工译断, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留授翻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓孙咪,卻偏偏與公主長(zhǎng)得像堪唐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子翎蹈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容