解决scrollview上的menu拖动问题以及menu item在可视区外仍能触发的问题

时间:2023-12-11 13:54:52

最近在做项目发现一个让人很头疼的问题

qiick-3.5 引擎 lua 版本

一 问题如下:

① 在Cocostudio中做界面 使用 scrollview 控件 ,然后 scrollview 控件的 item 点击事件 是 ImageView

② 当拖动 scrollview 的时候会 触发 item 的点击事件,照成体验及其的差。

 

二 解决方案

① 重写 imageview的 点击事件 添加一个成员变量

② 实现基本原理:

    1.首先判断当前imageview 是否接收了吞噬事件。如果不吞噬事件然后再进行事件阻断操作。

    2.将点击的起始坐标 转化成世界坐标 然后对比 点击结束后的坐标 如果 位置不一致 就不派发 点击事件

public:

  virtual bool onTouchBegan(Touch *touch, Event *unusedEvent);

virtual void onTouchEnded(Touch *touch, Event *unusedEvent);

private:

Vec2 _touchBeganWorldPosition;

② 方法实现

bool ImageView::onTouchBegan(Touch *touch, Event *unusedEvent)

{

_hitted = false;

if (isVisible() && isEnabled() && isAncestorsEnabled() && isAncestorsVisible(this) )

{

_touchBeganPosition = touch->getLocation();

bool isSwallowTouches = this->isSwallowTouches();

if (!isSwallowTouches)

{

_touchBeganWorldPosition = convertToWorldSpace(_touchBeganPosition);

}

if(hitTest(_touchBeganPosition) && isClippingParentContainsPoint(_touchBeganPosition))

{

_hitted = true;

}

}

if (!_hitted)

{

return false;

}

setHighlighted(true);

/*

* Propagate touch events to its parents

*/

if (_propagateTouchEvents)

{

this->propagateTouchEvent(TouchEventType::BEGAN, this, touch);

}

pushDownEvent();

return true;

}

void ImageView::onTouchEnded(Touch *touch, Event *unusedEvent)

{

_touchEndPosition = touch->getLocation();

bool isSwallowTouches = this->isSwallowTouches();

if(!isSwallowTouches){

Vec2 newWorldPos = convertToWorldSpace(_touchEndPosition);

const static float kMenuMinMove = 2;

if (fabs(newWorldPos.x - _touchBeganWorldPosition.x)>kMenuMinMove || fabs(newWorldPos.y-_touchBeganWorldPosition.y)>kMenuMinMove)

{

return;

}

}

/*

* Propagate touch events to its parents

*/

if (_propagateTouchEvents)

{

this->propagateTouchEvent(TouchEventType::ENDED, this, touch);

}

bool highlight = _highlight;

setHighlighted(false);

if (highlight)

{

releaseUpEvent();

}

else

{

cancelUpEvent();

}

}

用了以上的方法后,效果实现。

方法参考网址:http://blog.****.net/n5/article/details/38266855