--拖住功能
|
|
DragViewMgr = DragViewMgr or BaseClass()
|
|
|
|
local DragViewMgr = DragViewMgr
|
|
|
|
DragViewMgr.TouchType =
|
|
{
|
|
TouchDown = 1,
|
|
TouchMove = 2,
|
|
TouchUp = 3,
|
|
}
|
|
|
|
function DragViewMgr:__init()
|
|
self.base_file = false
|
|
self.layout_file = false
|
|
self.begin_callback = false
|
|
self.draging_callback = false
|
|
self.end_callback = false
|
|
self.item_class = false
|
|
|
|
self.drag_cache_item = false
|
|
self.start_drag = false
|
|
self.draging = false
|
|
|
|
self.old_pos = false
|
|
end
|
|
|
|
function DragViewMgr:Init(info)
|
|
self.base_file = info.base_file
|
|
self.layout_file = info.layout_file
|
|
self.begin_callback = info.begin_callback
|
|
self.draging_callback = info.draging_callback
|
|
self.end_callback = info.end_callback
|
|
self.item_class = info.item_class
|
|
self.item_parent = info.item_parent or MainUIController:GetInstance().GoodsFlyView.transform
|
|
|
|
end
|
|
|
|
function DragViewMgr:__delete()
|
|
if self.drag_cache_item then
|
|
self.drag_cache_item:DeleteMe()
|
|
self.drag_cache_item = nil
|
|
end
|
|
end
|
|
|
|
function DragViewMgr:Start()
|
|
self.start_drag = true
|
|
self.draging = false
|
|
Runner.Instance:AddRunObj(self, 1)
|
|
end
|
|
|
|
function DragViewMgr:Stop()
|
|
Runner.Instance:RemoveRunObj(self)
|
|
self.start_drag = false
|
|
self.draging = false
|
|
self.old_pos = false
|
|
end
|
|
|
|
function DragViewMgr:OnDragBegin(pos)
|
|
if not pos then return end
|
|
|
|
if not self.drag_cache_item then
|
|
self.drag_cache_item = self:CreatDragItem()
|
|
end
|
|
if not self.drag_cache_item then
|
|
print(">>>>>>>>>>>> 拖拽物体没有创建成功")
|
|
return
|
|
end
|
|
if self.begin_callback then
|
|
self.begin_callback(self.drag_cache_item)
|
|
end
|
|
self.drag_cache_item:SetVisible(true)
|
|
local w = ScreenWidth
|
|
local h = ScreenHeight
|
|
pos.x = w / 2 + pos.x
|
|
pos.y = h / 2 + pos.y
|
|
self.drag_cache_item:SetPosition(pos.x, pos.y)
|
|
|
|
end
|
|
|
|
function DragViewMgr:CreatDragItem()
|
|
local item = nil
|
|
if self.item_class ~= nil then
|
|
item = self.item_class.New(self.item_parent)
|
|
self.drag_cache_item = item
|
|
end
|
|
return item
|
|
end
|
|
|
|
function DragViewMgr:OnDragIng(pos)
|
|
local w = ScreenWidth
|
|
local h = ScreenHeight
|
|
pos.x = w / 2 + pos.x
|
|
pos.y = h / 2 + pos.y
|
|
if self.drag_cache_item then
|
|
self.drag_cache_item:SetPosition(pos.x, pos.y)
|
|
end
|
|
if self.draging_callback then
|
|
self.draging_callback(self.drag_cache_item, pos)
|
|
end
|
|
end
|
|
|
|
function DragViewMgr:OnDragEnd(pos)
|
|
Runner.Instance:RemoveRunObj(self)
|
|
if self.end_callback then
|
|
self.end_callback(self.drag_cache_item, pos)
|
|
end
|
|
if self.drag_cache_item then
|
|
self.drag_cache_item:SetVisible(false)
|
|
end
|
|
end
|
|
|
|
function DragViewMgr:Update()
|
|
if not self.start_drag then return end
|
|
|
|
local touch_type, pos = self:GetDragTouchTypeAndPos()
|
|
if not pos or not touch_type then
|
|
if self.draging then
|
|
self:Stop()
|
|
self:OnDragEnd(self.old_pos)
|
|
end
|
|
end
|
|
|
|
if touch_type == DragViewMgr.TouchType.TouchDown or touch_type == DragViewMgr.TouchType.TouchMove then
|
|
if not self.draging then
|
|
self:OnDragBegin(pos)
|
|
self.draging = true
|
|
self.old_pos = pos
|
|
return
|
|
end
|
|
|
|
self.old_pos = pos
|
|
self:OnDragIng(pos)
|
|
else
|
|
self:OnDragEnd(pos)
|
|
self:Stop()
|
|
end
|
|
end
|
|
|
|
function DragViewMgr:GetDragTouchTypeAndPos()
|
|
local touch_type = nil
|
|
local pos = nil
|
|
if Input.touchCount > 0 then
|
|
local touch = Input.GetTouch(0)
|
|
if touch then
|
|
pos = touch.position
|
|
pos.x = pos.x / ScreenConvertRatio - ScreenWidth*0.5
|
|
pos.y = pos.y / ScreenConvertRatio - ScreenHeight*0.5
|
|
if touch.phase == TouchPhase.Began then
|
|
touch_type = DragViewMgr.TouchType.TouchDown
|
|
elseif touch.phase == TouchPhase.Moved then
|
|
touch_type = DragViewMgr.TouchType.TouchMove
|
|
elseif touch.phase == TouchPhase.Ended then
|
|
touch_type = DragViewMgr.TouchType.TouchUp
|
|
end
|
|
end
|
|
else
|
|
if Input.GetMouseButtonDown(0) then
|
|
-- print(">>>>>>>>>>>> GetMouseButtonDown")
|
|
pos = Vector2(0,0)
|
|
pos.x = Input.mousePosition.x / ScreenConvertRatio - ScreenWidth*0.5
|
|
pos.y = Input.mousePosition.y / ScreenConvertRatio - ScreenHeight*0.5
|
|
touch_type = DragViewMgr.TouchType.TouchDown
|
|
elseif Input.GetMouseButtonUp(0) then
|
|
-- print(">>>>>>>>>>>> GetMouseButtonUp")
|
|
pos = Vector2(0,0)
|
|
pos.x = Input.mousePosition.x / ScreenConvertRatio - ScreenWidth*0.5
|
|
pos.y = Input.mousePosition.y / ScreenConvertRatio - ScreenHeight*0.5
|
|
touch_type = DragViewMgr.TouchType.TouchUp
|
|
elseif Input.GetMouseButton(0) then
|
|
--print(">>>>>>>>>>>> GetMouseButton")
|
|
pos = Vector2(0,0)
|
|
pos.x = Input.mousePosition.x / ScreenConvertRatio - ScreenWidth*0.5
|
|
pos.y = Input.mousePosition.y / ScreenConvertRatio - ScreenHeight*0.5
|
|
touch_type = DragViewMgr.TouchType.TouchMove
|
|
end
|
|
end
|
|
return touch_type, pos
|
|
end
|