[cocos2d]如何实现模态对话框

http://blog.sina.com.cn/s/blog_74bf41030100xdte.html

问题描述:

         在显示一些类似于模态对话框的窗口时,我们可能需要屏蔽touch事件,不让在弹出框下面的界面响应touch事件。

         而弹出框上某些区域,或者按钮可以响应touch事件。

解决方案:

           1> 给弹出框添加带吞噬能力的touch代理功能。

[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:kCCMenuTouchPriority + 1 swallowsTouches:YES];

       

注意:
         a>:代理是会被retain的。所以使用完后务必要移出。
[[CCTouchDispatcher sharedDispatcher] removeDelegate:self];
         b>:priority其值越小,越是会优先响应touch事件。
                             这里使用kCCMenuTouchPriority + 1 既该界面的响应优先级比菜单按钮优先级低。如果你希望又最高的优先级最好使用INT32_MIN+1

         2> 实现代理方法ccTouchBegan:返回YES表示吞噬touch事件,则其他代理都不收到该事件了。
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
     
       return YES;
}
         如果需要在某个区域内可以响应touch事件,则可以添加如下代码
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
         CGRect aRect = CGRectMake(50, 50, 50, 50);
       CGPoint touchpoint = [touch locationInView:[touch view]];
       touchpoint = [[CCDirectorsharedDirector ] convertToGL: touchpoint];
       return !CGRectContainsPoint(aRect, touchpoint);
}
         如果你希望除了菜单按钮以外的区域都不响应touch事件你也可以这样写:
   - (BOOL)ccTouchBegan:(UITouch *)touch
   withEvent:(UIEvent *)event
{
CCMenu *menu =
(CCMenu *)[selfgetChildByTag:kMenuItemLayerTag];
if ([menu itemForTouch:touch])
{
returnNO;
}
     
returnYES;
}

转载于:https://www.cnblogs.com/iapp/archive/2012/04/12/3631812.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值