修正SFUI_ScrollRect使用方法,区分滚动列表与对象池的适用场景
This commit is contained in:
@@ -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` | 需要频繁创建销毁的弹窗 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 五、子组件开发
|
## 五、子组件开发
|
||||||
|
|||||||
Reference in New Issue
Block a user