public virtual void OnDrag(PointerEventData eventData)
        {
            draggedItem.transform.position = eventData.position - dragHandleOffset;

            //we don't want to change siblings while we are still animating
            if (animationHelper.isHeightActive)
            {
                return;
            }

            var currentSiblingIndex = placeholder.transform.GetSiblingIndex();
            var newSiblingIndex     = dropZone.childCount - 1;

            for (int i = 0; i < dropZone.childCount; i++)
            {
                var child = dropZone.GetChild(i);
                if (eventData.position.y > child.position.y)
                {
                    newSiblingIndex = i;

                    if (currentSiblingIndex < newSiblingIndex)
                    {
                        newSiblingIndex--;
                    }

                    break;
                }
            }

            if (newSiblingIndex != placeholder.transform.GetSiblingIndex())
            {
                placeholder.transform.SetSiblingIndex(newSiblingIndex);
                animationHelper.AnimateHeight(PLACEHOLDER_MIN_HEIGHT, startingHeight, 0.1f);
            }
        }
示例#2
0
        public virtual void OnDrag(PointerEventData eventData)
        {
            var rt = draggedItem.transform as RectTransform;

            Vector2 localPointerPosition;

            if (RectTransformUtility.ScreenPointToLocalPointInRectangle(mainCanvas.transform as RectTransform, eventData.position, eventData.pressEventCamera, out localPointerPosition))
            {
                rt.localPosition = localPointerPosition - startingPosition;
            }

            //we don't want to change siblings while we are still animating
            if (animationHelper.isHeightActive)
            {
                return;
            }

            var currentSiblingIndex = placeholder.transform.GetSiblingIndex();
            var newSiblingIndex     = dropZone.childCount - 1;

            for (int i = 0; i < dropZone.childCount; i++)
            {
                var child = dropZone.GetChild(i);
                if (localPointerPosition.y > child.position.y)
                {
                    newSiblingIndex = i;

                    if (currentSiblingIndex < newSiblingIndex)
                    {
                        newSiblingIndex--;
                    }

                    break;
                }
            }

            if (newSiblingIndex != placeholder.transform.GetSiblingIndex())
            {
                placeholder.transform.SetSiblingIndex(newSiblingIndex);
                animationHelper.AnimateHeight(PLACEHOLDER_MIN_HEIGHT, startingHeight, 0.1f);
            }
        }
        public virtual void OnBeginDrag(PointerEventData eventData)
        {
            if (draggedItem == null)
            {
                draggedItem = this.transform.parent.parent.gameObject; //need to get the whole line as dragged item
            }
            dropZone             = draggedItem.transform.parent;
            startingSiblingIndex = draggedItem.transform.GetSiblingIndex();
            dragHandleOffset     = this.transform.position - draggedItem.transform.position;

            placeholder = new GameObject();
            placeholder.transform.SetParent(draggedItem.transform.parent);
            placeholder.transform.SetSiblingIndex(startingSiblingIndex);
            var rt = placeholder.AddComponent <RectTransform>();

            rt.pivot = Vector2.zero;

            var le = placeholder.AddComponent <LayoutElement>();

            le.preferredHeight = startingHeight = GetDraggedItemHeight();
            //le.flexibleWidth = 1;

            animationHelper             = draggedItem.AddComponent <UIAnimationHelper>();
            animationHelper.SetHeight   = SetPlaceholderHeight;
            animationHelper.SetPosition = SetDraggedItemPosition;

            animationHelper.AnimateHeight(le.preferredHeight, PLACEHOLDER_MIN_HEIGHT, 0.1f);

            var cg = draggedItem.AddComponent <CanvasGroup>();

            cg.blocksRaycasts = false;

            draggedItemBG            = draggedItem.AddComponent <Image>();
            draggedItemBG.sprite     = background;
            draggedItemBG.type       = Image.Type.Sliced;
            draggedItemBG.color      = Color.white;
            draggedItemBG.fillCenter = true;

            draggedItem.transform.SetParent(mainCanvas.transform);

            Debug.Log("OnBeginDrag: draggedItem.name = " + draggedItem.name + ", dropZone.name" + dropZone.name);
        }