仿iOS通知欄刪除按鈕

仿iOS通知欄刪除按鈕

最近變懶了矢否,通知欄很久都不清除了,清除的時候看到了刪除的動畫僵朗,覺得還可以,而且也想將學過的layer和view層的動畫都復習一遍验庙,順便做點demo練練手酱酬,就先從他開始了壶谒。

222.gif

分析

初始.jpg

我們觀察到這個按鈕最開始是圓形,中間有2條垂直且傾斜的線膳沽,然后點擊之后,十字(姑且叫十字陨界,哈哈)會向左邊移動,且逐漸虛化消失痛阻,然后蹦跶出來2個字菌瘪,也是有淺到深,而且仔細觀察會發(fā)現(xiàn),字的出現(xiàn)是先右邊出現(xiàn)俏扩,然后左邊出現(xiàn)的,而且有點震動的動畫捌木。分析之后其實該動畫很簡單嫉戚,就是一個位移和透明度漸變動畫,加上字的顯現(xiàn)彬檀。

動起來

創(chuàng)建初始狀態(tài)

代碼初始.jpg

首先,我們來寫上2條互相交叉的線努潘,

    CALayer *vertical = [CALayer layer];;
    vertical.backgroundColor = [UIColor blackColor].CGColor;
    vertical.frame = CGRectMake(self.bounds.size.height/2,(self.bounds.size.height - width)/2, 1, width);
    
    CALayer *horizontal = [CALayer layer];;
    horizontal.backgroundColor = [UIColor blackColor].CGColor;
    horizontal.frame = CGRectMake((self.bounds.size.height - width)/2, self.bounds.size.height/2, width, 1);

分別命名為vertical何horizontal盯桦,代表豎直和水平方向的線。

且分別算出2條線的frame拥峦,這個沒難度,這里的width是高度一半的平方和求根

CGFloat width = sqrtf(pow(self.bounds.size.height/2, 2)*2);刑峡,

因為后面這2條線都是一起運動的玄柠,所以現(xiàn)在將他們加到一個layer上,直接對該layer添加動畫即可宫患。

    CALayer *containtLayer = [CALayer layer];
    [containtLayer addSublayer:vertical];
    [containtLayer addSublayer:horizontal];
    containtLayer.frame = CGRectMake(0, 0, self.bounds.size.height, self.bounds.size.height);
    containtLayer.transform = CATransform3DMakeRotation((M_PI*45)/180, 0, 0, 1);
    self.containtLayer = containtLayer;
    [self.layer addSublayer:containtLayer];

細心的同學應(yīng)該發(fā)現(xiàn)了中間出現(xiàn)了一個3D的東西還有M_PI這些東西这弧。這個其實就是控制整個layer的傾斜的,向左或者向右偏移45度其實都可以匾浪。

這樣,一個傾斜的十字就做出來了蛋辈,然后就是點擊事件。

點擊動畫

按鈕點擊之后渐白,按鈕會向左移動,并且變寬纯衍,但是高度和cornerRadius不變(這里我使用的是:)

self.layer.cornerRadius = self.frame.size.height/2;
self.clipsToBounds = YES;)

這種做法,這會導致離屏渲染,但是我們這兒就1個view柒巫,姑且不管他),控制view的動畫我采用的是UIView的動畫应结,直接改變self的frame.

    [UIView animateWithDuration:animationTime animations:^{
    if (self.style == CCButtonStyleLeftToRight) {
        self.frame = CGRectMake(self.originalFrame.origin.x, self.originalFrame.origin.y, self.originalFrame.size.width, self.originalFrame.size.height);
    }else{
        self.frame = CGRectMake(self.originalFrame.origin.x, self.originalFrame.origin.y, self.originalFrame.size.width, self.originalFrame.size.height);
    }
}];

我定義了2種樣式泉唁,向左和向右的。

然后是十字的動畫扮休。

直接采用CABasicAnimation拴鸵,設(shè)置transform、transform.translation.x和opacity劲藐,然后添加到CAAnimationGroup,一起進行動畫兄渺,在動畫之后汰现,保持動畫的樣子,不要回到開始服鹅。

    transformGroup.removedOnCompletion = NO;
    transformGroup.fillMode=kCAFillModeForwards;

文字

這兒的文字我采用CATextLayer進行顯示企软,但是用textlayer就有一個問題,就是它默認是豎直向上的,并不是居中铅辞,所以就會導致顯示出來的文字靠上萨醒,目前來說我并沒有找到有什么好方法,我采用寫死的富纸,寫到居中((⊙﹏⊙)b)。

CATextLayer和UILabel還會有一點區(qū)別的堵漱,它的字體用的是CFTypeRef

/* The font to use, currently may be either a CTFontRef, a CGFontRef,
 * or a string naming the font. Defaults to the Helvetica font. Only
 * used when the `string' property is not an NSAttributedString. */

但是這個類可以從UIFont中獲取到涣仿,可以看出其實是可以用CTFontRef、CGFontRef或者直接是字體名的好港;并且可以看出,只有不是NSAttributedString才會有用丈探。

添加到self.layer之后崭孤,需要將opacity置為0,開始并不現(xiàn)實遗锣,然后再點擊之后顯示出來嗤形,改變opacity為1精偿。而且還要控制放大縮小的動畫赋兵。

    CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
    scale.values = @[[NSValue valueWithCATransform3D:CATransform3DMakeScale(0, 0, 0)], [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.5, 0.5, 0)],
                     [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.25, 1.25, 0)],
                     [NSValue valueWithCATransform3D:CATransform3DMakeScale(1, 1, 0)]];
    
    CABasicAnimation *opacity = [CABasicAnimation animationWithKeyPath:@"opacity"];
    opacity.fromValue = [NSNumber numberWithFloat:0];
    opacity.toValue = [NSNumber numberWithFloat:1];

大小需要先放大到1.25倍笔咽,然后再縮小到原來大小霹期。
寫完代碼后,動畫就是這樣的:


代碼完成.gif

其他

基本這個動畫的點就是這么多甩十。還有一點就是,點擊其他地方侣监,按鈕需要縮小回來,這里采用的是對Windows寫的一個分類窃爷,劫持響應(yīng)者鏈姓蜂,然后發(fā)送通知。

結(jié)尾

基本這次就是這些钱慢,干貨并不多或者沒有((⊙﹏⊙)b),后面還會到dribbble上面去找一點好看的動畫來做,其實做動畫還是很簡單御吞,主要是分解成很多小動畫來找思路。

好了挟裂,這次的demo放在github上揍诽,有興趣的可以看看。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末渠啤,一起剝皮案震驚了整個濱河市添吗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碟联,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壶栋,死亡現(xiàn)場離奇詭異普监,居然都是意外死亡琉兜,警方通過查閱死者的電腦和手機锡移,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門淆珊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人施符,你說我怎么就攤上這事『葡” “怎么了听哭?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長普筹。 經(jīng)常有香客問我隘马,道長,這世上最難降的妖魔是什么酸员? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任幔嗦,我火速辦了婚禮,結(jié)果婚禮上邀泉,老公的妹妹穿的比我還像新娘。我一直安慰自己棘伴,他們只是感情好屁置,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阱穗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揪阶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天炊苫,我揣著相機與錄音冰沙,去河邊找鬼。 笑死拓挥,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的当叭。 我是一名探鬼主播盖灸,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼糠雨!你這毒婦竟也來了徘跪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤松邪,失蹤者是張志新(化名)和其女友劉穎哨查,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邮府,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡溉奕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年加勤,在試婚紗的時候發(fā)現(xiàn)自己被綠了同波。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叠国。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖粟焊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情筒溃,我是刑警寧澤沾乘,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站歪玲,受9級特大地震影響掷匠,放射性物質(zhì)發(fā)生泄漏滥崩。R本人自食惡果不足惜讹语,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一顽决、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧才菠,春花似錦、人聲如沸可都。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽步悠。三九已至,卻和暖如春芹壕,著一層夾襖步出監(jiān)牢的瞬間汇四,已是汗流浹背踢涌。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留背苦,地道東北人潘明。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像钳降,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子铲觉,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

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

  • 在iOS中隨處都可以看到絢麗的動畫效果撵幽,實現(xiàn)這些動畫的過程并不復雜,今天將帶大家一窺ios動畫全貌盐杂。在這里你可以看...
    每天刷兩次牙閱讀 8,469評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果哆窿,實現(xiàn)這些動畫的過程并不復雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,101評論 5 13
  • 轉(zhuǎn)載:http://www.reibang.com/p/32fcadd12108 每個UIView有一個伙伴稱為l...
    F麥子閱讀 6,167評論 0 13
  • 日前,記者從公司人力資源部了解到链快,截至6月6日,已有469名通過2017年校園招聘的高校畢業(yè)生同公司簽訂了就業(yè)協(xié)議...
    苛娃閱讀 212評論 0 0
  • 難受了3個多月的眼睛終于有所好轉(zhuǎn)了巨双,疙瘩慢慢吸收了,不過還有點難受筑累,只是從外觀看不到它腫了,身體所發(fā)出的信號真是神...
    憧憬幸福閱讀 91評論 0 0