修正SFUI_ScrollRect使用方法,区分滚动列表与对象池的适用场景

This commit is contained in:
Shiliang
2026-05-22 15:46:01 +08:00
parent 6ede453103
commit 42fcb5664a

View File

@@ -145,7 +145,7 @@ img.HFClearSprite();
### 3.4 SFUI_ScrollRect组件列表滚动 ### 3.4 SFUI_ScrollRect组件列表滚动
SFUI_ScrollRect 专门用于处理多物品的上下滑动列表,提供高效的列表渲染和滚动管理。 SFUI_ScrollRect 专门用于处理多物品的上下滑动列表,**内置对象池机制实现循环列表**提供高效的列表渲染和滚动管理。
```csharp ```csharp
SFUI_ScrollRect scroll = GetComponent<SFUI_ScrollRect>(); SFUI_ScrollRect scroll = GetComponent<SFUI_ScrollRect>();
@@ -166,15 +166,38 @@ scroll.ScrollToIndex(0); // 滚动到第N项
scroll.verticalNormalizedPosition = 0; // 滚动到底部1=顶部0=底部) scroll.verticalNormalizedPosition = 0; // 滚动到底部1=顶部0=底部)
``` ```
**BindEvent 参数说明**
| 参数 | 类型 | 说明 |
|-----|------|------|
| 1 | `Func<int>` | 返回数据总数 |
| 2 | `Func<int, GameObject>` | 根据索引返回模板对象 |
| 3 | `Action<SFUI_ScrollRectItem>` | 列表项更新回调 |
| 4 | `Func<SFUI_ScrollRectItem, AbsHFUIWindow>` | 获取列表项组件 |
**更新回调示例**
```csharp
private void OnUpdateItem(SFUI_ScrollRectItem _item)
{
ItemSlot slot = _item.simulateBehaviour as ItemSlot;
ItemData data = itemList[_item.dataIdx];
slot.SetData(data, OnItemClick);
}
```
**使用流程** **使用流程**
1.`OnRunAwake` 中调用 `BindEvent` 绑定数据 1.`OnRunAwake` 中调用 `BindEvent` 绑定数据
2.`OnOpen` 或数据更新时调用 `ShowView` 刷新显示 2.`OnOpen` 或数据更新时调用 `ShowView` 刷新显示
3. 通过 `ScrollToIndex``verticalNormalizedPosition` 控制滚动位置 3. 通过 `ScrollToIndex``verticalNormalizedPosition` 控制滚动位置
> **注意**SFUI_ScrollRect 已内置对象池机制,**无需额外使用 HFSimulateBehaviourPool** 实现循环列表。
--- ---
## 四、对象池模式 ## 四、对象池模式
> **注意****循环滚动列表请使用 `SFUI_ScrollRect.BindEvent`**HFSimulateBehaviourPool 适用于非滚动场景的对象复用。
### 4.1 对象池初始化 ### 4.1 对象池初始化
```csharp ```csharp
@@ -194,7 +217,7 @@ protected override void OnRunAwake()
} }
``` ```
### 4.2 对象池使用 ### 4.2 对象池使用(适用于固定数量场景)
```csharp ```csharp
private void RefreshItems() private void RefreshItems()
@@ -210,12 +233,26 @@ private void RefreshItems()
} }
} }
private void OnItemClick(ItemData data) // 适用于固定数量的装备栏、技能栏等场景
private void ShowEquipedCards()
{ {
// 处理点击逻辑 m_CardItems.RecycUsingObject();
for (int i = 0; i < 5; i++)
{
var item = m_CardItems.GetItem(out bool isNew);
// 设置数据...
}
} }
``` ```
### 4.3 适用场景对比
| 场景 | 推荐方式 | 说明 |
|-----|---------|------|
| **滚动列表** | `SFUI_ScrollRect.BindEvent` | 自动实现循环复用 |
| **固定数量栏** | `HFSimulateBehaviourPool` | 如装备栏、技能栏5个固定位置 |
| **动态弹窗** | `HFSimulateBehaviourPool` | 需要频繁创建销毁的弹窗 |
--- ---
## 五、子组件开发 ## 五、子组件开发