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); } }
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); }