关于tableview的旋转

前提:本文测试用的quick版本为2.2.1-rc

最近写一个接口,是关于过关条件的。因为条件是后台编辑,长度不固定,所以需要做成可滑动的。采取的措施是将编辑内容打散,分成若干个label,然后将其写入tableview中。由于某种原因,存放tableview的parentnode是旋转过的,如果直接将tableview放入,则导致tableview的UI和触摸范围不一致。表现为在指定位置可以接收到触摸事件,但是UI却不在此位置。
问题出现的原因是scrollview的裁剪出现问题,可以用setClippingToBounds(false)来进行测试。但是这样子的话scrollview就失去了原有的特性。解决方法有两种。1>修改scrollview的裁剪算法。因为同事做过这个功能,所以我直接借鉴他的代码。他是这样处理的,重写scrollview代码。首先判断是否旋转过,如果旋转过,则在befrodraw中转换一下宽度和高度。代码如下。

else {
            glEnable(GL_SCISSOR_TEST);
            if (!isHDeviceOrientation())
            {
                CCSize winSize = CCDirector::sharedDirector()->getWinSize();
                frame.origin.y = winSize.height-frame.origin.y;
                frame.origin.y = 0;
                CC_SWAP(frame.size.width, frame.size.height, float);
            }
            CCEGLView::sharedOpenGLView()->setScissorInPoints(frame.origin.x, frame.origin.y, frame.size.width, frame.size.height);
        }

同时修改getViewRect(),添加代码如下

if (isHDeviceOrientation())
        return CCRectMake(screenPos.x, screenPos.y, m_tViewSize.width*scaleX, m_tViewSize.height*scaleY);

同事用其做了一个牌桌的过关提示,证明是可行的。但是这样有个劣势是,需要不断的调整scrollview的viewsize,position和contentoffset。需要不断尝试。2> 修改旋转。tableview有两种方式,horizontal和vertical。设想一下因为父节点旋转,导致tableview的裁剪出问题,问题的原因可以在裁剪上,也可以在旋转上。如果父节点旋转,同时tableview也旋转,让其总旋转为360度,是否就相当于没有旋转,这样裁剪就不会出现问题了。事实证明这样是可行的。唯一需要注意的是tableview需要旋转270度,同时如果理想的滑动方式为垂直,现在需要改动为左右滑动。tableview没有旋转,要营造出旋转的效果,可以旋转tableviewcell内的节点。这样就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值