iOS tabbar中間凸起丢胚,Tabbar item圖標(biāo)點(diǎn)擊動畫效果

思路

自定義tabbar ,重新對按鈕進(jìn)行布局

    CJTabbar * tabbar = [[CJTabbar alloc]init];
    [self setValue:tabbar forKey:@"tabBar"];
//  創(chuàng)建中心按鈕
-(void)creatCenterButton{
    
    UIButton * centerButton = [UIButton buttonWithType:0];
    self.centerButton = centerButton;
    [centerButton addTarget:self action:@selector(centerButtonClick:) forControlEvents:UIControlEventTouchUpInside];
    [centerButton setImage:[UIImage imageNamed:@"money"] forState:UIControlStateNormal];
    [self addSubview:centerButton];
    
}
//  重新布局
-(void)layoutSubviews{
    [super layoutSubviews];
    CGFloat buttonW = self.bounds.size.width / 5;
    NSInteger index = 0;
    for (NSInteger i = 0;  i < self.subviews.count; i++) {
            UIView * tabbarButton = self.subviews[i];
            if ([tabbarButton isKindOfClass:NSClassFromString(@"UITabBarButton")]) {

                if (index == 2) {
                       index++;
                }
                tabbarButton.frame = CGRectMake(index*buttonW, 0, buttonW, 49);
                index++;
            }
    }
    self.centerButton.frame =  CGRectMake(2*buttonW, -20, buttonW, 49);
}
//  處理凸出部分點(diǎn)擊事件不響應(yīng)的問題
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    CGPoint tempPoint = [self convertPoint:point toView:self.centerButton];
    if ([self.centerButton pointInside:tempPoint withEvent:event]) {
        return self.centerButton;
    }else{
        return [super hitTest:point withEvent:event];
    }
}

注:

//hitTest的底層實(shí)現(xiàn):
//
//    1.先看自己是否能接受觸摸事件
//    2.再看觸摸點(diǎn)是否在自己身上
//    3.從后往前遍歷子控件,拿到子控件后树碱,再次重復(fù)1,2步驟,要把父控件上的坐標(biāo)點(diǎn)轉(zhuǎn)換為子控件坐標(biāo)系下的點(diǎn)杜耙,再次執(zhí)行hitTest方法
//    4.若是最后還沒有找到合適的view,那么就return self拂盯,自己就是合適的view
//
//備注:當(dāng)控件接收到觸摸事件的時候佑女,不管能不能處理事件,都會調(diào)用hitTest方法

hitTest的底層實(shí)現(xiàn) 參考http://www.reibang.com/p/12af9103be03

tabBarItem 點(diǎn)擊圖片做了動畫處理

-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{
        NSInteger index = [self.tabBar.items indexOfObject:item];
         if (index != self.itemSelectIndex) {
               //獲取按鈕
               NSMutableArray *arry = [NSMutableArray array];
               for (UIView *btn in self.tabBar.subviews) {
                   if ([btn isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
                        [arry addObject:btn];
                   }
               }
                //添加動畫
                 //放大效果
                 CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
                 //速度控制函數(shù)谈竿,控制動畫運(yùn)行的節(jié)奏
                 animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
                 animation.duration = 0.2;       //執(zhí)行時間
                 animation.repeatCount = 1;      //執(zhí)行次數(shù)
                 animation.removedOnCompletion = NO;
                 animation.fillMode = kCAFillModeForwards;           //保證動畫效果延續(xù)
                 animation.fromValue = [NSNumber numberWithFloat:1.0];   //初始伸縮倍數(shù)
                 animation.toValue = [NSNumber numberWithFloat:1.15];     //結(jié)束伸縮倍數(shù)
                 [[arry[index] layer] addAnimation:animation forKey:nil];
                 //移除其他tabbar的動畫
                 for (int i = 0; i<arry.count; i++) {
                     if (i != index) {
                         [[arry[i] layer] removeAllAnimations];
                     }
                 }
                 self.itemSelectIndex = index;
             }

}

Tabbar圖標(biāo)點(diǎn)擊動畫效果參考 http://www.reibang.com/p/b1d277a3d148
tabbar中間凸起团驱,Tabbar item圖標(biāo)點(diǎn)擊動畫效果完整代碼GitHub

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市空凸,隨后出現(xiàn)的幾起案子嚎花,更是在濱河造成了極大的恐慌,老刑警劉巖呀洲,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贩幻,死亡現(xiàn)場離奇詭異,居然都是意外死亡两嘴,警方通過查閱死者的電腦和手機(jī)丛楚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來憔辫,“玉大人趣些,你說我怎么就攤上這事》∧” “怎么了坏平?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锦亦。 經(jīng)常有香客問我舶替,道長,這世上最難降的妖魔是什么杠园? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任顾瞪,我火速辦了婚禮,結(jié)果婚禮上抛蚁,老公的妹妹穿的比我還像新娘陈醒。我一直安慰自己,他們只是感情好瞧甩,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布钉跷。 她就那樣靜靜地躺著,像睡著了一般肚逸。 火紅的嫁衣襯著肌膚如雪爷辙。 梳的紋絲不亂的頭發(fā)上彬坏,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天,我揣著相機(jī)與錄音膝晾,去河邊找鬼栓始。 笑死,一個胖子當(dāng)著我的面吹牛玷犹,可吹牛的內(nèi)容都是我干的混滔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼歹颓,長吁一口氣:“原來是場噩夢啊……” “哼坯屿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起巍扛,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤领跛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后撤奸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吠昭,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年胧瓜,在試婚紗的時候發(fā)現(xiàn)自己被綠了矢棚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡府喳,死狀恐怖蒲肋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钝满,我是刑警寧澤兜粘,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站弯蚜,受9級特大地震影響孔轴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜碎捺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一路鹰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧牵寺,春花似錦悍引、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俩块。三九已至黎休,卻和暖如春浓领,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背势腮。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工联贩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捎拯。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓泪幌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親署照。 傳聞我的和親對象是個殘疾皇子祸泪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評論 2 359

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