希望有人可以帮助我...我正在跟踪here for CCMenuAdvanced所看到的示例,但最终结果很奇怪,我看到了菜单并滚动了,但是使用boundaryRect属性我似乎无法隐藏它菜单的一部分,并显示我想要的内容。
这是我的代码:
// Setup Menu Alignment
[menuA alignItemsVerticallyWithPadding:0 bottomToTop:NO]; //< also sets contentSize and keyBindings on Mac
menuA.isRelativeAnchorPoint = YES;
menuA.boundaryRect = CGRectMake(0, 100, 230, 200);
[menuA fixPosition];
[self addChild:menuA];
我可以滚动并查看整个列表,这很好,但是我无法设置一个区域一次仅查看菜单的一部分,这是boundaryRect应该做的。以前有人使用过,可以给我一些建议吗?!
谢谢!
最佳答案
好吧,不是来自同一个班级,而是来自本地的滚动菜单。我使用menuItems本身的可见性和透明度。向上滚动时,如果菜单标签接近矩形的边缘,则我将其逐渐淡出为0。当menuItem的锚点位于矩形外部时,我将其可见性设置为NO(因此无法单击)。同样下去。夹紧是棘手的。如果menuItems列表的长度小于边界矩形的高度,或者大于矩形的高度,则必须设置这些属性。像这样的东西(经过编辑,不是实际的代码...不知道它是否可以编译:)):
-(void) fixMenuItemOpacity:(CCMenuItemLabel*) mi{
float theY = mi.position.y ;
if (fadeOutZoneHeight_<4.0f) {
if (theY> self.boundaryRect.origin.y+self.boundaryRect.size.height/2 - fadeOutZoneHeight_) {
mi.visible=NO;
} else if( theY < self.boundaryRect.origin.y-self.boundaryRect.size.height/2 + fadeOutZoneHeight_) {
mi.visible=NO;
} else {
mi.visible=YES;
}
return;
}
float delta;
float percentOpacity;
float topWindow;
float bottomWindow;
float top;
float bottom;
/*
not visible
--------------------------- top
visible, variable opacity
--------------------------- top window
opacity 100%
-------------------------- bottomWindow
visible, variable opacity
------------------------- bottom
*/
top = self.boundaryRect.origin.y + self.boundaryRect.size.height/2;
topWindow = top - fadeOutZoneHeight_;
bottom = self.boundaryRect.origin.y - self.boundaryRect.size.height/2;
bottomWindow=bottom+ fadeOutZoneHeight_;
if (theY> top ) {
mi.visible=NO;
} else if ( (theY > topWindow) && (theY < top)) {
mi.visible=YES;
delta = abs((int)top - (int)theY);
percentOpacity=delta/fadeOutZoneHeight_;
mi.opacity=(GLubyte )(255.0f*percentOpacity);
} else if( (theY <= topWindow ) && (theY >= bottomWindow ) ){
mi.opacity=255;
mi.visible=YES;
} else if ( (theY < bottomWindow) && (theY >= bottom) ){
mi.visible=YES;
delta= abs((int)bottom - (int)theY);
percentOpacity = delta/fadeOutZoneHeight_;
mi.opacity=(GLubyte ) (255.0*percentOpacity);
} else {
mi.visible=NO;
}
}