//回收时解除消息绑定,及两者间关联 public virtual void ReturnObject(LoopScrollRect scrollRect, Transform trans) { var insID = scrollRect.GetInstanceID(); try { ScrollElementDict[insID][trans].UnRegisterEvent(); ScrollElementDict[insID][trans].Dispose(); ScrollElementDict[insID][trans] = null; ScrollElementDict[insID].Remove(trans); } catch (System.Exception) { throw new System.Exception($"{scrollRect.name}不存在于事件列表: {trans.name}"); } SpawnManager.Instance.DespawnObject(trans); }
//Loop Rect创建新对象的同时,均会与新子对象建立消息侦听,避免使用SendMessage public virtual GameObject GetObject(LoopScrollRect scrollRect) { var go = SpawnManager.Instance.SpwanObject(prefabName); var insID = scrollRect.GetInstanceID(); var trans = go.transform; go.transform.localScale = Vector3.one; if (!ScrollElementDict.ContainsKey(insID)) { ScrollElementDict.Add(insID, new Dictionary <Transform, BaseScrollElement>()); } if (ScrollElementDict[insID].ContainsKey(trans)) { ScrollElementDict[insID][trans].UnRegisterEvent(); ScrollElementDict[insID][trans].Dispose(); ScrollElementDict[insID][trans] = null; ScrollElementDict[insID].Remove(trans); } ScrollElementDict[insID][trans] = ExecuteTypeScript(); ScrollElementDict[insID][trans].RegisterEvent(scrollRect, trans); ScrollElementDict[insID][trans].Init(); return(go); }
public override void ProvideData(LoopScrollRect sr, int idx) { MsgManager.Instance.Broadcast(InternalEvent.UI_SCROLL_ELEMENT, new MsgArgs(sr.GetInstanceID(), idx)); }