void LateUpdate() { if (InputFieldActive)// && TouchScreenKeyboard.visible) { rectTransform.anchoredPosition = Vector2.zero; Rect rect = RectTransformExtension.GetScreenRect(childRectTransform, canvas); float heightPercentOfKeyboard = GetKeyboardHeightRatio() * 100f; float heightPercentOfInput = (Screen.height - (rect.y + rect.height)) / Screen.height * 100f; if (heightPercentOfKeyboard > heightPercentOfInput) { // keyboard covers input field so move screen up to show keyboard float differenceHeightPercent = heightPercentOfKeyboard - heightPercentOfInput; float newYPos = rectTransform.rect.height / 100f * differenceHeightPercent; Vector2 newAnchorPosition = Vector2.zero; newAnchorPosition.y = newYPos; rectTransform.anchoredPosition = newAnchorPosition; } else { // Keyboard top is below the position of the input field, so leave screen anchored at zero rectTransform.anchoredPosition = Vector2.zero; } } else { // No focus or touchscreen invisible, set screen anchor to zero rectTransform.anchoredPosition = Vector2.zero; } InputFieldActive = false; }
void Update() { if (next) { line.enabled = true; line.Points = new Vector2[] { new Vector2(0f, 0f), new Vector2(30f, 0), RectTransformExtension.switchToRectTransform(next.anchor.GetComponent <RectTransform>(), line.GetComponent <RectTransform>()) - new Vector2(30f, 0), RectTransformExtension.switchToRectTransform(next.anchor.GetComponent <RectTransform>(), line.GetComponent <RectTransform>()) }; } else { line.enabled = false; } }
void LateUpdate() { if ((InputFieldActive) && ((TouchScreenKeyboard.visible))) { transform.GetComponent <RectTransform>().anchoredPosition = Vector2.zero; Rect rect = RectTransformExtension.GetScreenRect(childRectTransform, canvas); float keyboardHeight = (float)GetKeyboardHeight(); float heightPercentOfKeyboard = keyboardHeight / Screen.height * 100f; float heightPercentOfInput = (Screen.height - (rect.y + rect.height)) / Screen.height * 100f; if (heightPercentOfKeyboard > heightPercentOfInput) { // keyboard covers input field so move screen up to show keyboard float differenceHeightPercent = heightPercentOfKeyboard - heightPercentOfInput; float newYPos = transform.GetComponent <RectTransform>().rect.height / 100f * differenceHeightPercent; Vector2 newAnchorPosition = Vector2.zero; #if UNITY_ANDROID newAnchorPosition.y = newYPos + 40; #elif UNITY_IOS newAnchorPosition.y = newYPos; #endif transform.GetComponent <RectTransform>().anchoredPosition = newAnchorPosition; } else { // Keyboard top is below the position of the input field, so leave screen anchored at zero transform.GetComponent <RectTransform>().anchoredPosition = Vector2.zero; } } else { // No focus or touchscreen invisible, set screen anchor to zero transform.GetComponent <RectTransform>().anchoredPosition = Vector2.zero; } //InputFieldActive = false; }
//获取cell 的位置偏移, 目的是使其对位是content 的左上角 private Vector2 GetCellOffsetValue(RectTransform pCell) { #if UNITY_EDITOR if (pCell.IsStandAnchorType() == false) { Debug.LogError("cell 的锚点必须是标准的形式, 就是TopLeft, TopCenter ... ... 这种"); } #endif RectTransformAnchorType tAnchorType = pCell.GetAnchorType(); Vector2 tAnchorValue = RectTransformExtension.GetAnchorTypeValue(tAnchorType).Key; Vector2 tTLAnchorValue = RectTransformExtension.GetAnchorTypeValue(RectTransformAnchorType.TopLeft).Key; Vector2 tAnchorOffset = tTLAnchorValue - tAnchorValue; Vector2 tAnchorOffsetPos = new Vector2(mRectTransform.rect.width * tAnchorOffset.x, mRectTransform.rect.height * tAnchorOffset.y); Vector2 tTLPivotValue = new Vector2(0, 1); Vector2 tPivotOffset = pCell.pivot - tTLPivotValue; Vector2 tPivotOffsetPos = new Vector2(tPivotOffset.x * pCell.rect.width, tPivotOffset.y * pCell.rect.height); Vector2 tTotalOffsetPos = new Vector2(tAnchorOffsetPos.x + tPivotOffsetPos.x, tAnchorOffsetPos.y + tPivotOffsetPos.y); return(tTotalOffsetPos); }