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

简介: 问题描述:      在显示一些类似于模态对话框的窗口时,我们可能需要屏蔽touch事件,不让在弹出框下面的界面响应touch事件。      而弹出框上某些区域,或者按钮可以响应touch事件。 解决方案:       1> 给弹出框添加带吞噬能力的touch代理功能。 [[CCTouchDispatcher sharedDispatcher] addTargetedDe
问题描述:
     在显示一些类似于模态对话框的窗口时,我们可能需要屏蔽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
{
    /**override to what you like*/
    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;
}
     注意:其中itemForTouch:方法的使用有点技巧,提示这个方法是ccmenu的私有方法

     当然除了使用这种暴力方式以外,也可以用优先级来实现,如上面提到的priority:kCCMenuTouchPriority + 1。这种方式就需要大家能良好的执行约定。同时用优先级来控制有个问题,如果与下层的按钮重叠的时候,是那个执行那?
目录
相关文章
|
5月前
11 MFC - 模态对话框
11 MFC - 模态对话框
20 0
|
4月前
|
Android开发
Android Studio入门之图像显示解析及实战(附源码 超详细必看)(包括图像视图、图像按钮、同时展示文本与图像)
Android Studio入门之图像显示解析及实战(附源码 超详细必看)(包括图像视图、图像按钮、同时展示文本与图像)
67 1
|
23天前
|
测试技术 API UED
【Qt 应用开发 】初步理解 Qt窗口中的模态性应用
【Qt 应用开发 】初步理解 Qt窗口中的模态性应用
68 1
|
4月前
|
Windows
MFC学习之路(9)之如何使控件大小随着对话框大小自动调整
MFC学习之路(9)之如何使控件大小随着对话框大小自动调整
44 0
8. 关于Blender的窗口,你需要知道的细节
8. 关于Blender的窗口,你需要知道的细节
299 0
|
缓存 算法 计算机视觉
项目实战:Qt+OpenCV大家来找茬(Qt抓图,穿透应用,识别左右图区别,框选区别,微调位置)
项目实战:Qt+OpenCV大家来找茬(Qt抓图,穿透应用,识别左右图区别,框选区别,微调位置)
项目实战:Qt+OpenCV大家来找茬(Qt抓图,穿透应用,识别左右图区别,框选区别,微调位置)
|
计算机视觉
Qt实用技巧:使QWidget作为模态对话框显示
Qt实用技巧:使QWidget作为模态对话框显示
|
容器
Flutter 137: 图解自定义 ACEFoldTextView 折叠文本
0 基础学习 Flutter,第一百三十七步:尝试构建一个简单的可折叠文本!
5304 0
Flutter 137: 图解自定义 ACEFoldTextView 折叠文本
|
Android开发 iOS开发
浅析APP控件:模态弹窗与非模态弹窗
浅析APP控件:模态弹窗与非模态弹窗 在手机app应用中各种格式的弹窗效果相信大家都看过,此次分享就来谈谈关于app弹窗设计以及弹窗的适用情景。 一、弹窗的定义 1、弹窗作用 弹窗是为了让用户回应,需要用户与之交互的窗口。
3843 0