iOS (UIButton封裝)仿糯米首頁縮放“按鈕”效果

前言

過年期間,少不了各種聚會诊沪,當(dāng)下聚會大多數(shù)情況下自然是團購养筒,然后就是用各種APP。娄徊。。使用度娘糯米時(不是廣告盾戴,不是廣告寄锐,不是廣告!)尖啡,偶然注意到了它的首頁中一個有意思的效果橄仆,就是那些“按鈕”點擊時的縮放動畫,有一種“按下去”的趕腳衅斩,恰逢前陣子做過一個錄音按鈕的“點動”效果盆顾,忍不住便封裝了這個按鈕效果:GitHub

動態(tài)縮放按鈕,“按下去”的效果

demo中的按鈕背景圖片截取自度娘糯米首頁畏梆,僅供學(xué)習(xí)參考您宪!

糯米首頁應(yīng)該是collectionView布局吧?也許奠涌,這里只是純粹實現(xiàn)效果宪巨,封裝了系統(tǒng)的按鈕。
關(guān)于這個效果溜畅,首先不得不提一個概念——點動捏卓。

1.關(guān)于“點動”按鈕

點動這一概念,我是從硬件那邊搬過來的慈格。
曾經(jīng)做單片機時怠晴,按鍵是一個很重要的外設(shè)遥金,硬件按鍵在編寫代碼實現(xiàn)功能時,一般有兩種效果:帶鎖按鈕蒜田,不帶鎖按鈕稿械。
所謂帶鎖按鈕,就是點擊按鈕之后立刻松手物邑,就能實現(xiàn)對應(yīng)功能溜哮,例如我們曾經(jīng)用過的按鍵手機的數(shù)字鍵都是這樣的。
所謂不帶鎖按鈕色解,也就是這里要說的“點動”茂嗓,顧名思義,就是點擊就動科阎,松手即停述吸。單片機那邊一般在電機控制什么的場景經(jīng)常用到,在我們軟件這邊锣笨,較普遍的一個應(yīng)用場景就是“錄音按鈕”(微信語音神馬的)蝌矛。
錄音按鈕在點擊時進行錄音,一旦松手错英,錄音就會停止入撒。
為了便于說明,寫了以下效果進行演示椭岩,button的showsTouchWhenHighlighted屬性打開以指示按鈕正在被點擊中茅逮。

點動按鈕效果

2.實現(xiàn)“點動”按鈕

實現(xiàn)按鈕的“點動”其實很簡單:

//按下時
[myButton addTarget:self 
           action:@selector(pressedEvent:) 
 forControlEvents:UIControlEventTouchDown];
//松手后
[myButton addTarget:self 
           action:@selector(unpressedEvent:) 
 forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside];

接下來在按鈕的點擊響應(yīng)實現(xiàn)中:

- (void)pressedEvent:(id)sender

實現(xiàn)的是按鈕按下的響應(yīng),例如錄音開始并持續(xù)判哥。

- (void)unpressedEvent:(id)sender

則實現(xiàn)的是松開按鈕(停止點擊)時的響應(yīng)献雅,此時執(zhí)行結(jié)束錄音。

兩個響應(yīng)結(jié)合起來塌计,也就實現(xiàn)了硬件按鈕的“點動”效果(硬件按鍵是根據(jù)高低電平判定的挺身,所以代碼實現(xiàn)十分簡單,對單片機有興趣的朋友可以查閱相關(guān)資料锌仅,不過硬件按鍵按下時的電平“抖動”則是十分令人頭疼的問題)章钾。

這里還要提一點,就是ControlEvents热芹,這里寫的是UIControlEventTouchUpInside | UIControlEventTouchUpOutside伍玖,意思就是在按鈕區(qū)域范圍內(nèi)或者范圍外(按下之后,手指移動拖移)松手(停止點擊)剿吻,都會執(zhí)行“松手響應(yīng)”窍箍,這在一些情況下要注意區(qū)分,例如接下來要實現(xiàn)的“縮放按鈕”。如果我們只寫UIControlEventTouchUpInside椰棘,那么纺棺,我們在按鈕區(qū)域范圍外松手,也就是點擊之后邪狞,手指拖動祷蝌,移到按鈕frame外,unpressedEvent響應(yīng)是不執(zhí)行的帆卓,我們從而也就實現(xiàn)了一個“取消”效果巨朦,當(dāng)然這個不是用在錄音按鈕中的。

3.動畫縮放按鈕

前面啰嗦了一大堆剑令,現(xiàn)在切入正題糊啡,其實,正題也就沒什么要說的了吁津,實現(xiàn)糯米的這一效果棚蓄,無非還是上面的“動作拆分”思想,我們只要將按鈕按下的縮放動畫碍脏,以及動畫執(zhí)行之后的真正的響應(yīng)梭依,分別寫在兩個響應(yīng)函數(shù)中就可以了。

//按鈕的按下事件 按鈕縮小
- (void)pressedEvent:(JXTPushInButton *)btn
{
  //縮放比例必須大于0典尾,且小于等于1
  CGFloat scale = (_buttonScale && _buttonScale <=1.0) ? _buttonScale : defaultScale;//defaultScale默認為0.9

  [UIView animateWithDuration:animateDelay animations:^{
      btn.transform = CGAffineTransformMakeScale(scale, scale);
  }];
}
//按鈕的松開事件 按鈕復(fù)原 執(zhí)行響應(yīng)
- (void)unpressedEvent:(JXTPushInButton *)btn
{
  [UIView animateWithDuration:animateDelay animations:^{
      btn.transform = CGAffineTransformMakeScale(1.0, 1.0);
  } completion:^(BOOL finished) {
      //執(zhí)行動作響應(yīng)
      if (self.clickBlock) {
          self.clickBlock();
      }
  }];
}

按鈕按下真正要執(zhí)行的響應(yīng)役拴,封裝在了block中,button的封裝詳見我傳到github中的代碼钾埂,調(diào)用很方便河闰,還是一句話:

JXTPushInButton * btn = [JXTPushInButton touchUpOutsideCancelButtonWithType:UIButtonTypeCustom frame:CGRectMake(0, 0, ScreenWidth - 20, 80) title:@"按鈕-1" titleColor:[UIColor blackColor] backgroundColor:[UIColor redColor] backgroundImage:nil andBlock:^{
    NSLog(@"frame內(nèi)部松手執(zhí),行按鈕-1");
}];
[self.view addSubview:btn];

參考文章:
1.UIButton---按住錄音勃教,松開停止
2.iOS下UIButton壓下后播放動畫淤击,松開后動畫消失的實現(xiàn)

·轉(zhuǎn)載請注明出處·

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末匠抗,一起剝皮案震驚了整個濱河市故源,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌汞贸,老刑警劉巖绳军,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異矢腻,居然都是意外死亡门驾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門多柑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奶是,“玉大人,你說我怎么就攤上這事∧羯常” “怎么了秆麸?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長及汉。 經(jīng)常有香客問我沮趣,道長,這世上最難降的妖魔是什么坷随? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任房铭,我火速辦了婚禮,結(jié)果婚禮上温眉,老公的妹妹穿的比我還像新娘缸匪。我一直安慰自己,他們只是感情好芍殖,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布豪嗽。 她就那樣靜靜地躺著,像睡著了一般豌骏。 火紅的嫁衣襯著肌膚如雪龟梦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天窃躲,我揣著相機與錄音计贰,去河邊找鬼。 笑死蒂窒,一個胖子當(dāng)著我的面吹牛躁倒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播洒琢,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼秧秉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了衰抑?” 一聲冷哼從身側(cè)響起象迎,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎呛踊,沒想到半個月后砾淌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡谭网,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年汪厨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愉择。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡劫乱,死狀恐怖织中,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情衷戈,我是刑警寧澤抠璃,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站脱惰,受9級特大地震影響搏嗡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拉一,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一采盒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蔚润,春花似錦磅氨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至除盏,卻和暖如春叉橱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背者蠕。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工窃祝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人踱侣。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓粪小,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抡句。 傳聞我的和親對象是個殘疾皇子探膊,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,506評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件待榔、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,024評論 4 62
  • 在xml文件中需要對攔截器進行配置 在src下配置攔截器的Java類
    itachi閱讀 406評論 0 0
  • 一逞壁、看見了什么 二、這張卡上什么元素吸引了你 三究抓、這個焦點讓你想到了什么 四猾担、你想到的事讓你產(chǎn)生什么情緒什么反應(yīng) ...
    艷敏_c9e0閱讀 650評論 0 0
  • 如果單單從內(nèi)容的角度來衡量的話袭灯,我是一個不喜歡看新電影的人刺下,因為我知道,能夠經(jīng)歷時間大浪淘沙般洗滌留下美名的電影稽荧,...
    分貝書屋閱讀 983評論 1 2