关于ScrollView滚动事件与内部按钮点击事件冲突的问题

来源:互联网 发布:数据库系统导论第七版 编辑:程序博客网 时间:2024/06/02 00:16

在做签到系统的时候,当玩家当天内首次进入游戏时自动弹出签到界面。界面上有一个ScrollView,里面是一个个按钮(签到奖励),点击签到奖励可以查看详情。
这里写图片描述
在不做任何处理的时候遇到的问题如下:
如果手指在按钮上滑动,ScrollView的滚动效果出现了,但是按钮的点击事件也触发了,这显然不是我们想要的效果。
第一次失败尝试:
由于按钮的层级位于ScrollView之上,设置按钮的触摸吞噬事件,使得触摸事件向下传递,同时两个事件不会同时响应,但这也造成了一个新的问题,在按钮所在的位置,手指滑动ScrollView无法出现滚动效果,这是由于把按钮的触摸吞噬事件被打开,下层的ScrollView接收不到touchBegin,touchMoved和touchEnd。

self.button:setSwallowTouches(true); //设置按钮触摸吞噬

成功的解决办法:

function PresentCell:presentIconClick(_sender, _eventType)    if _eventType == ccui.TouchEventType.began then        self.flag = true;        self.beginTouchPoint= _sender:convertToWorldSpace(cc.p(_sender:getPositionX(), _sender:getPositionY()))        return;    elseif _eventType == ccui.TouchEventType.moved then        local offsetPexil = 5;        local movedPoint =  _sender:convertToWorldSpace(cc.p(_sender:getPositionX(), _sender:getPositionY()))        if (movedPoint.x -self.beginTouchPoint.x) * (movedPoint.x - self.beginTouchPoint.x) >= offsetPexil * offsetPexil then           self.flag = false;        end        return;    end    if self.flag then        if self.iconClickHandler ~= nil then            self.iconClickHandler(self.realShopData);        end    endend

touchEnd的时候判断flag是否为true。如果为true,则触发按钮点击。如果为false,则说明滑动了,则滚动scrollView。

0 0
原创粉丝点击