V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
xujialiang
V2EX  ›  iDev

唉,一个 IOS 问题求助,实在是没办法了。。要失眠了~~~~~

  •  
  •   xujialiang ·
    xujialiang · 2014-04-24 22:17:51 +08:00 · 5635 次点击
    这是一个创建于 3869 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我模仿微信的按住说话,Button在屏幕底部,我按住button,没有触发touchdown事件。我手指离开时,同时触发touchdown和touchup事件。。
    但是 如果我把button 放在屏幕上方一点,比如屏幕中间,就一切正常,按下直接能触发touchdown事件。为什么?
    第 1 条附言  ·  2014-04-25 07:40:57 +08:00
    感谢各位,我发现问题根源了,uinavigationcontroller自己有interactionpopgesture,如果按钮在底部,恰巧又是在屏幕左边,那么按钮的touchdown事件会失效,也不算失效,就是手指当下去不会立即触发,要手指动一动。在我禁用了interactionpopgesture后,按钮的事件正常了,但是腾讯是如何处理的呢?我看到微信的左划返回前一页还是正常的
    第 2 条附言  ·  2014-04-25 14:49:17 +08:00
    经过大家坚持不懈的努力,我终于找到解决方案了。
    这是我测试的项目http://xujialiang.net/TestGesture.zip
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    if ([touch.view isKindOfClass:[XJLButtonPress class]]) {
    [self.btnbutton sendActionsForControlEvents:UIControlEventTouchDown];
    return NO;
    }
    return YES;
    }
    这是主要的代码 哈哈哈
    25 条回复    1970-01-01 08:00:00 +08:00
    Cwind
        1
    Cwind  
       2014-04-24 23:20:42 +08:00   ❤️ 1
    试下禁用Control Center后是否还会有这个问题?
    txx
        2
    txx  
       2014-04-24 23:23:05 +08:00   ❤️ 1
    為什麼不用Gesture 而是用 UIControlEvent 呢...
    順路說...iOS 謝謝...
    alexrezit
        3
    alexrezit  
       2014-04-24 23:46:11 +08:00   ❤️ 1
    @txx
    其實這種情況用 control event 寫起來更簡單, 雖然我們的項目裏我用的也是 gesture recognizer. = =
    而且樓主的問題應該是自己哪兒寫挫了.
    txx
        4
    txx  
       2014-04-24 23:51:51 +08:00   ❤️ 1
    @alexrezit
    1、你趕緊給我睡覺去...
    2、我懷疑是樓主的frame有問題....推薦用reveal 看看
    Cee
        5
    Cee  
       2014-04-24 23:53:16 +08:00
    ls秀恩爱= =
    txx
        6
    txx  
       2014-04-25 01:46:37 +08:00
    @Cee 這傢伙身體太可怕....太容易掛掉了,不看這點不行。

    順便吐槽樓主一句,這也好意思說自己失眠了。我剛解決了一個bug想回來看看樓主有什麼新進展可以討論一下的..
    結果發現是nothing啊...
    Cee
        7
    Cee  
       2014-04-25 02:18:54 +08:00   ❤️ 1
    @txx 身体是革命的本钱><
    @alexrezit 每天都得⑨点去滚床哦

    自己还在写做作业TAT 冒个泡
    dorentus
        8
    dorentus  
       2014-04-25 02:18:58 +08:00 via iPad
    附议楼上,这也叫失眠?
    alexrezit
        9
    alexrezit  
       2014-04-25 07:14:44 +08:00
    @txx
    @Cee
    其實是睡醒了一覺起來冒個泡吃點東西又回去繼續睡的... = =
    alexrezit
        10
    alexrezit  
       2014-04-25 07:15:55 +08:00
    @txx
    只是 frame 的話 simulator 自帶 layer 著色功能的, 看 responder chain 才用得著 Reveal 吧.
    xujialiang
        11
    xujialiang  
    OP
       2014-04-25 07:37:50 +08:00 via iPhone
    感谢各位楼上,我发现问题根源了,uinavigationcontroller自己有interactionpopgesture,如果按钮在底部,恰巧又是在屏幕左边,那么按钮的touchdown事件会失效,也不算失效,就是手指当下去不会立即触发,要手指动一动。
    hoogle
        13
    hoogle  
       2014-04-25 09:29:36 +08:00   ❤️ 1
    interactionpopgesture的问题,实现UIGestureDelegate的shouldBeRequiredToFailByGestureRecognizer。
    railgun
        14
    railgun  
       2014-04-25 10:00:04 +08:00
    怎么搞iOS开发的都是死宅……
    txx
        15
    txx  
       2014-04-25 10:05:49 +08:00
    @railgun 人家才不是搞iOS開發的呢!
    Hysteria
        16
    Hysteria  
       2014-04-25 10:06:24 +08:00
    我还以为是frame问题。
    hongri
        17
    hongri  
       2014-04-25 10:22:29 +08:00
    austinchou0126
        18
    austinchou0126  
       2014-04-25 10:38:37 +08:00
    我只是进来膜拜一下楼上各位的。。。
    robinshi2010
        19
    robinshi2010  
       2014-04-25 10:42:15 +08:00
    通常都是冲突了。当初也掉到这个坑里过。
    alexrezit
        20
    alexrezit  
       2014-04-25 12:10:10 +08:00
    @txx
    承認自己是死宅了嗯.
    xx314327475
        21
    xx314327475  
       2014-04-25 12:15:57 +08:00
    我为什么点了这个帖子.....额...
    Jellyan
        22
    Jellyan  
       2014-04-25 13:14:45 +08:00
    楼主好无辜,完全被忽略了
    NUT
        23
    NUT  
       2014-04-25 13:29:35 +08:00   ❤️ 1
    可以自己实现一个button。
    思路:继承一个UIview,当触摸点在这个view上时,触发按下的事件。如果触摸点划出这个范围则响应不是没在触摸区域的事件。
    主要玩
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
    - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
    这三个方法。

    AwesomeMenu这个库有具体的实现。看了就明白。
    txx
        24
    txx  
       2014-04-25 13:34:35 +08:00   ❤️ 1
    @NUT 樓主發現問題是和iOS7的滑動手勢衝突了。

    所以關注點應該是 把滑動返回的 delegate 設到當前頁面 然後處理手勢區域。

    不過我還是更推崇用 Gesture,然後iOS 7 多了一些手勢有關的delegate,能更好的處理衝突。
    xujialiang
        25
    xujialiang  
    OP
       2014-04-25 14:35:38 +08:00
    在上班。。。。回去再看看具体怎么解决,前面试了下interactiongesture的代理,手指碰上屏幕就有事件。下面还要判断 是否点在button上。
    @NUT 自己写个button太麻烦了,如果好多页面有自定义的button,那要写好多呢。。。。。

    我想让navigationcontroller的左滑识别区域不包含屏幕底部,高度大概44.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3855 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:30 · PVG 18:30 · LAX 02:30 · JFK 05:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.