关于tableview的旋转

来源:互联网 发布:手机抠图软件 编辑:程序博客网 时间:2024/06/05 22:52

前提:本文测试用的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内的节点。这样就可以了。

0 0
原创粉丝点击