修正SFUI_ScrollRect使用方法,区分滚动列表与对象池的适用场景
This commit is contained in:
@@ -145,7 +145,7 @@ img.HFClearSprite();
|
||||
|
||||
### 3.4 SFUI_ScrollRect组件(列表滚动)
|
||||
|
||||
SFUI_ScrollRect 专门用于处理多物品的上下滑动列表,提供高效的列表渲染和滚动管理。
|
||||
SFUI_ScrollRect 专门用于处理多物品的上下滑动列表,**内置对象池机制实现循环列表**,提供高效的列表渲染和滚动管理。
|
||||
|
||||
```csharp
|
||||
SFUI_ScrollRect scroll = GetComponent<SFUI_ScrollRect>();
|
||||
@@ -166,15 +166,38 @@ scroll.ScrollToIndex(0); // 滚动到第N项
|
||||
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` 绑定数据
|
||||
2. 在 `OnOpen` 或数据更新时调用 `ShowView` 刷新显示
|
||||
3. 通过 `ScrollToIndex` 或 `verticalNormalizedPosition` 控制滚动位置
|
||||
|
||||
> **注意**:SFUI_ScrollRect 已内置对象池机制,**无需额外使用 HFSimulateBehaviourPool** 实现循环列表。
|
||||
|
||||
---
|
||||
|
||||
## 四、对象池模式
|
||||
|
||||
> **注意**:**循环滚动列表请使用 `SFUI_ScrollRect.BindEvent`**,HFSimulateBehaviourPool 适用于非滚动场景的对象复用。
|
||||
|
||||
### 4.1 对象池初始化
|
||||
|
||||
```csharp
|
||||
@@ -194,7 +217,7 @@ protected override void OnRunAwake()
|
||||
}
|
||||
```
|
||||
|
||||
### 4.2 对象池使用
|
||||
### 4.2 对象池使用(适用于固定数量场景)
|
||||
|
||||
```csharp
|
||||
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` | 需要频繁创建销毁的弹窗 |
|
||||
|
||||
---
|
||||
|
||||
## 五、子组件开发
|
||||
|
||||
Reference in New Issue
Block a user