【已解决】UIScrollView 的问题

在这个模式下SCROLLVIEW_MOVE_MODE_NORMAL,滚动层横向滚动,填满滚动层可视区域需要8个子节点,现在手动添加大于8个子节点,比如15个,左右拖拽可以正常滚动,然后手动删除一定数目子节点,用removeFromParentAndCleanup(true),比如删除10个,只剩5个,这时候左右拖拽就出现问题了,正常应该是不能拖拽。但现在是可以拖拽,如果只剩一个子节点,则会非常难看,拖拽会左右停靠。

— Begin quote from ____

%url%pipu 发表于 2013-7-18 13:40
你好,
删除 scrollview 子节点不要使用子节点调用 removeFromParentAndCleanup,因为 scrollview 子节点被 …

— End quote

你好,总算找到问题了,我在UIScrollView::resortChildren函数结尾加上一下代码:
m_fChildrenSizeHeight = m_pTopChild->getRelativeTopPos()-m_pBottomChild->getRelativeBottomPos();
m_fChildrenSizeWidth = m_pRightChild->getRelativeRightPos()-m_pLeftChild->getRelativeLeftPos();
resetProperty();

再按你所说的调用removeChildMoveToTrash方法,就不会出现左右跳动的问题了。
跳动问题主要是一下代码出现问题,
case SCROLLVIEW_DIR_HORIZONTAL: // horizontal
if (m_fChildrenSizeWidth <= m_fWidth)
{
berthChildren(m_eDirection);

            return false;
        }

删除子节点后,m_fChildrenSizeWidth 没有更新,不会进入这个if语句

— Begin quote from ____

%url%pipu 发表于 2013-7-18 13:40
你好,
删除 scrollview 子节点不要使用子节点调用 removeFromParentAndCleanup,因为 scrollview 子节点被 …

— End quote

这方法好像是protected的,那我先改下源码试试吧

— Begin quote from ____

%url%pipu 发表于 2013-7-18 13:40
你好,
删除 scrollview 子节点不要使用子节点调用 removeFromParentAndCleanup,因为 scrollview 子节点被 …

— End quote

用 removeChildMoveToTrash这个方法,还是有同样的问题,我删掉一个子节点后,我把删掉节点之后的节点都往前移了一个节点的宽度,让他们紧凑,估计是这个过程还需要作额外的处理。。

你好,
删除 scrollview 子节点不要使用子节点调用 removeFromParentAndCleanup,因为 scrollview 子节点被删除后,scrollview 需要重新计算最边上的子节点。
楼主试一下下面两个方法:
scrollview 彻底删除子节点,可以调用 removeChildMoveToTrash(UIWidget* child)
scrollview 只删除子节点引用,可以调用 removeChildReferenceOnly(UIWidget* child)

呵呵,加油!

你好,
删除 scrollview 子节点不要使用子节点调用 removeFromParentAndCleanup,因为 scrollview 子节点被删除后,scrollview 需要重新计算最边上的子节点。
楼主试一下下面两个方法:
scrollview 彻底删除子节点,可以调用 removeChildMoveToTrash(UIWidget* child)
scrollview 只删除子节点引用,可以调用 removeChildReferenceOnly(UIWidget* child)