cocoa-touch - iOS UIButton 的 touchDown 事件
ringa_lee
ringa_lee 2017-04-17 13:53:08
0
6
814

我的app是一个很普通的tabbar里嵌套navigationController的结构,里面要实现一个类似微信语音聊天的界面,那么我做了一个简易的底部栏用来放键盘输入和语音输入切换。
在我实现语音按钮输入的时候,我给button添加了不同touchEvent的回调

[longPressButton addTarget:self action:@selector(buttonTouchDown) forControlEvents:UIControlEventTouchDown];

[longPressButton addTarget:self action:@selector(buttonTouchUpInside) forControlEvents:UIControlEventTouchUpInside];

...
等几个event,用来显示不同状态下的语音提示。
现在问题就是button的UIControlEventTouchDown事件在手指按上去时不会触发,而当手指稍微滑动一下,才会触发。或者手指很快触碰然后拿开,会看到touchDown 和touchUpInside都触发了。

我一开始以为是和这个帖子一个问题:

http://www.cocoachina.com/bbs/read.php?tid=142527

但试过也没有解决。应该不是5楼说的问题,我就做了个小demo,发现3.5-inch屏幕没有问题,4-inch屏幕会出现问题,而且肯定是和tabbar有关系。
我把低栏的position移到中间一点,就不会出现上面的问题,把低栏放在tabbar的位置,就会出现。
而且我换过自己重写touchBegin方法,结果是和event事件一样不会触发。
圈子里一定有很多朋友做过类似的IM功能,所以希望能指点一二,我把例子代码放到附件了。

update:

我用reveal打开运行时的view hierarchy,发现底部的button没有被任何层遮住,还有一个现象很奇怪,仔细观察能发现,代码例子中在底部的button,touch处于屏幕左半部分是会有上述的问题的,touchBegin不响应,需要移动才响应,但button在屏幕的右半部分touch是ok的,就是会有些延迟,希望高手能帮我解决这个问题。

ringa_lee
ringa_lee

ringa_lee

全部回覆(6)
伊谢尔伦

進了題主所在公司後第一個搞定的問題就是這個bug,具體可看iOS 8下將UIButton放置於tabbar位置無法回應event。

刘奇

我沒有確切的證據,但根據你的描述,我猜測是這樣的。

Tabbar的點擊區域是大於可見區域的,至少高出10個像素左右。如圖綠色區域是點擊區域,明顯高出可視區域。

而Cocoa的點擊事件是從下向上傳遞的,所以你的Tabbar在最下邊,一定是先攔截到點擊。

至於解決方案,我覺得兩個辦法,一個是把你的Bar在做大一點,大到即使被Tabbar蓋住10個像素仍然很容易點中;另一個就是重寫Tabbar。

Peter_Zhu

會不會是線程阻塞了,當touchUpInside的時候有回到了主線程,所以相應了之前一直阻塞的TouchDown的事件,所以出現了剛開始不相應,後來相應兩個動作的情況,如果有可能的話,看看是不是多執行緒上出現了問題。

迷茫

你好,我下載了你在 git 上的 demo 程式碼。不過 tab 兩邊進去,點選按鈕都會打 Log:buttonTouchDown。可以描述一下你期待的效果是什麼樣的嗎?在哪個版本、哪種螢幕尺寸上重現?

大家讲道理

你那堆event可以看做一個手勢,你的按下抬起都是手勢的組成事件。缺失動作會導致手勢判斷不完全,無法觸發某個事件。
你需要的是重寫下面的回呼方法
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

另外觸發不靈敏的問題可能是觸發範圍太小,觸摸面積的電平值打不到閾值,畢竟標準要求44個像素的面積。

刘奇

請問後面怎麼解決的,我夜遇到這個問題。 。 。貌似以上的都沒有效果啊

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!