iOS 按鈕點動縮放效果獲取點擊時間間隔(按鈕點擊一次兩個處理事件)

場景

1.png

像上圖展示的圖片一樣,每次用戶點擊上下左右不同方向的時候,需要向機(jī)器人發(fā)送指令,其實就是發(fā)送一條IM消息。但是要求就是點擊下去的時候發(fā)送向各個方向行走的指令,當(dāng)手指脫離的時候發(fā)送停止指令,也就是只要手指不松開就不發(fā)送停止指令,并且還需要對這個手指點擊 離開的時間做判斷。一開始閃過的是通過手勢,后來仔細(xì)想了一下,感覺用手勢做的話,添加手勢還有手勢處理的代碼比價多,果斷不喜歡。想到用按鈕做可能就更好一點,so ,好像看到了一個更好的處理方法。

初步

大多數(shù)對于按鈕的操作都是如下所示
[_registerBtn addTarget:selfaction:@selector(regiestAction:)forControlEvents:UIControlEventTouchUpInside];

處理最多的是TouchUpInside,然后點進(jìn)去尋找這個枚舉里面更多的內(nèi)容

2.png

排在第一UIControlEventTouchDown,表示當(dāng)點擊的時候就會觸發(fā),再加上UIControlEventTouchUpInside的配合正好可以滿足這種需求。一個是當(dāng)手指剛放上去,另一個則是手指離開按鈕,并且能夠取到這種時間差

因為需要多個按鈕 而且每一個都需要做這種處理,要是每一個都是按鈕都按照下面那么直白的寫法,肯定不行啊!
//手指剛點擊按鈕 [self addTarget:self action:@selector(pressedEvent:) forControlEvents:UIControlEventTouchDown]; //手指離開按鈕 [self addTarget:self action:@selector(pressedEndEvent:) forControlEvents:UIControlEventTouchUpInside];

過程

若是用繼承來寫的話,感覺這樣的做法太重了,而且對于耦合度而言感覺是得不償失,另外需要注意的這里面還有個需要對這個點擊操作持續(xù)時間的處理,即從手指放到按鈕上到手指離開按鈕這段時間。于是就想到了用類別category,順帶可以把按鈕的點擊事件用block來處理了。不過這里就需要運(yùn)用到一點runtime的知識了,需要動態(tài)的給UIButton添加屬性,不過這里不做重點講述,可以看demo中的具體代碼,以后會寫相關(guān)內(nèi)容。

objc_setAssociatedObject(self, &pressedKey, pressblock, OBJC_ASSOCIATION_COPY_NONATOMIC); objc_setAssociatedObject(self, &unpressedKey, unpressedblock,OBJC_ASSOCIATION_COPY_NONATOMIC);

pressedBlock block = (pressedBlock)objc_getAssociatedObject(self, &pressedKey); unpressedBlock block = (unpressedBlock)objc_getAssociatedObject(self, &unpressedKey);

//執(zhí)行點動效果(放大) [UIView animateWithDuration:selfAnimateTime animations:^{ self.transform = CGAffineTransformMakeScale(1.0, 1.0); } completion:^(BOOL finished) { //此處是當(dāng)按鈕的放大動畫做完之后可以進(jìn)行后續(xù)的操作 根據(jù)自身業(yè)務(wù)調(diào)節(jié) }];

上面為category中的一部分代碼,詳細(xì)流程與代碼請到GitHub
希望小伙伴多一起交流進(jìn)步????。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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