/// <summary> /// Unblocks drag events on view. /// </summary> public void UnblockDragEvents(View view) { var eventTrigger = view.GetComponent <EventTrigger>(); if (eventTrigger == null) { return; } #if UNITY_4_6 || UNITY_5_0 var triggers = eventTrigger.delegates; #else var triggers = eventTrigger.triggers; #endif if (triggers == null) { return; } // check if view has drag event entries bool hasDragEntries = false; bool hasScrollEntries = false; foreach (var entry in triggers) { if (entry.eventID == EventTriggerType.BeginDrag || entry.eventID == EventTriggerType.EndDrag || entry.eventID == EventTriggerType.Drag || entry.eventID == EventTriggerType.InitializePotentialDrag) { hasDragEntries = true; } else if (entry.eventID == EventTriggerType.Scroll) { hasScrollEntries = true; } } // unblock scroll events if the view doesn't handle scrolling if (!hasScrollEntries) { // unblock scroll var scrollEntry = new EventTrigger.Entry(); scrollEntry.eventID = EventTriggerType.Scroll; scrollEntry.callback = new EventTrigger.TriggerEvent(); scrollEntry.callback.AddListener(eventData => { ScrollRectComponent.SendMessage("OnScroll", eventData); }); triggers.Add(scrollEntry); } // unblock drag events if the view doesn't handle drag events if (!hasDragEntries) { // unblock initialize potential drag var initializePotentialDragEntry = new EventTrigger.Entry(); initializePotentialDragEntry.eventID = EventTriggerType.InitializePotentialDrag; initializePotentialDragEntry.callback = new EventTrigger.TriggerEvent(); initializePotentialDragEntry.callback.AddListener(eventData => { SendMessage("OnInitializePotentialDrag", eventData); }); triggers.Add(initializePotentialDragEntry); // unblock begin drag var beginDragEntry = new EventTrigger.Entry(); beginDragEntry.eventID = EventTriggerType.BeginDrag; beginDragEntry.callback = new EventTrigger.TriggerEvent(); beginDragEntry.callback.AddListener(eventData => { SendMessage("OnBeginDrag", eventData); }); triggers.Add(beginDragEntry); // drag var dragEntry = new EventTrigger.Entry(); dragEntry.eventID = EventTriggerType.Drag; dragEntry.callback = new EventTrigger.TriggerEvent(); dragEntry.callback.AddListener(eventData => { SendMessage("OnDrag", eventData); }); triggers.Add(dragEntry); // end drag var endDragEntry = new EventTrigger.Entry(); endDragEntry.eventID = EventTriggerType.EndDrag; endDragEntry.callback = new EventTrigger.TriggerEvent(); endDragEntry.callback.AddListener(eventData => { SendMessage("OnEndDrag", eventData); }); triggers.Add(endDragEntry); } }