UI抽取思路

一款手机游戏中UI有几十个到上百个不等,如果一个一个做这些UI,无疑会花费很多时间。

近期我们的游戏UI已经是第N次改版了,经过这N多次的修改,我总结了UI其实有很多的共性(就是相同性)。

下面说一些我觉得常用的UI的抽取思路

共用按钮

共同点:按钮,标题,[图标],[消息数提醒]

思路分析

按钮点击事件和标题是一定有的,其它的视情况而定。所以我们可以创建一个类 BtnItemClass,用来处理UI的逻辑,外部就只要传入相应的参数就可

共用组件

using System;
using UnityEngine;
using System.Collections; /// <summary>
/// 共用的图文按钮,抽取类
/// 包括:商店,挑战,朋友,英雄
/// </summary>
public class BtnItemClass
{
public string TitleSprite;
public string IconSprite;
public string BtnName;
public string NextUITitle;
//按钮点击的事件
public UIEventListener.VoidDelegate Callback;
//消息提醒数
public string TipMsg;
public int TipNum;
private bool IsEnabled; /// <summary>
/// 构造函数
/// </summary>
/// <param name="btnName">按钮名</param>
/// <param name="iconSprite">Item 图标</param>
/// <param name="titleSprite">标题文字图片,没有就填null</param>
/// <param name="nextUiTitle">下一级UI的标题</param>
/// <param name="callback">点击的事件</param>
/// <param name="enabled"></param>
public BtnItemClass(string btnName, string iconSprite, string titleSprite, string nextUiTitle, UIEventListener.VoidDelegate callback, bool enabled = true)
{
this.BtnName = btnName;
this.IconSprite = iconSprite ?? "null";
this.TitleSprite = titleSprite ?? "null";
this.NextUITitle = nextUiTitle;
this.Callback = callback;
IsEnabled = enabled;
} public BtnItemClass()
    {
    }
//设置属性
public static void Bind(BtnItemClass itemClass, Transform trans)
{
if(!string.IsNullOrEmpty( itemClass.BtnName))
trans.name = itemClass.BtnName; //标题文字图片
UISprite titleSprite = CTool.GetChildComponent<UISprite>("TitleSprite", trans);
titleSprite.spriteName = itemClass.TitleSprite;
titleSprite.MakePixelPerfect(); //图标
UISprite iconSprite = CTool.GetChildComponent<UISprite>("IconSprite", trans);
iconSprite.spriteName = itemClass.IconSprite;
iconSprite.MakePixelPerfect(); //当标题图片找不到时就显示文字
var titleLabel = CTool.GetChildComponent<UILabel>("TitleLabel", trans);
if (string.IsNullOrEmpty(itemClass.TitleSprite)|| itemClass.TitleSprite == "null")
{
titleLabel.text = itemClass.NextUITitle;
titleLabel.gameObject.SetActive(true);
}
else
{
titleLabel.gameObject.SetActive(false);
} //绑定事件
trans.GetComponent<UIEventListener>().onClick = itemClass.Callback; //button.isEnabled = item.IsEnable = item.IsEnable;
}
}

使用方法

首先构建一个List,里面里包含当前的UI所有按钮的数据,然后做刷新UI(生成按钮,设置按钮属性)

//按钮数据
private List<BtnItemClass> UIConfigList
{
get
{
return new List<BtnItemClass>()
{ new BtnItemClass("BtnHeroList", "BattleTeam_icon_HeroStrong", "null", "英雄强化",
obj => CNetPlayer.CheckPackageOverflow_WithMsgBox(() => CUIHeroList.Show("英雄强化"))),
new BtnItemClass( "武器强化,obj => CUIPowerUp.ShowWeaponstSelectList()),
};
}
} //刷新UI
private void RefreshUI()
{
var max = UIConfigList.Count;
CUIHelper.ResizeCUITableGridGameObjects(TableGrid, max, CommPicBtnTemplate); for (int idx = ; idx < max; idx++)
{
var trans = TableGrid.transform.GetChild(idx);
var itemClass = UIConfigList[idx];
BtnItemClass.Bind(itemClass, trans);
} TableGrid.Reposition();
}

UI的重用性的更多相关文章

  1. Java使用泛型类来提高方法的可重用性

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3832268.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  2. Class撑起了OOP世界的天。Class类是OO的基本单元,OO的世界都是通过一个一个的类协作完成的,提高软件的重用性、灵活性和扩展性(转)

    引言 在OO的工作中,我们一定会涉及到类,抽象类和接口.那么类和抽象类以及接口到底扮演的什么角色? 本文主要是从人类社会的角度阐述类与抽象类以及接口的“社会”关系,从而让我们抛弃书上的那些死记硬背的概 ...

  3. CSS垂直翻转/水平翻转提高web页面资源重用性——张鑫旭

    一.CSS下兼容性的元素水平/垂直翻转实现 随着现代浏览器对CSS3的支持愈发完善,对于实现各个浏览器兼容的元素的水平翻转或是垂直翻转效果也就成为了可能.相关的CSS代码如下: /*水平翻转*/ .f ...

  4. IOS开发篇UI之重用scrollView

    1.scrollView的介绍 scrollView是UI中的基础视图,他有着至关重要的作用,也是我们在UI中常用的控件.他的代理有很多我们需要用,这里我们就不再一一介绍了. 2.简单scrollVi ...

  5. 12-27cell 的可重用性(英雄列表应用性能的优化)

    在英雄列表中动态生成cell的代码在中, - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N ...

  6. python之组合与重用性

    1 组合 组合的概念:软件重用的重要方式除了继承之外还有另外一种方式,即:组合 组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合 >>> class Equip: ...

  7. MVC引入SERVICE层 提高代码重用性 沟通CONTROL和MODEL

    MVC是web开发中常见的程序结构. 简单的mvc结构如下: view层:显示层. control层:业务层,集合了各种action. model层:模型层,一般和数据打交道.简单的sample:一个 ...

  8. 如何实现artTemplate模板的可重用性,以此框架打造自己的自定义组件

    问题的提出: 我们为什么非得要引入artTemplate来进行JSON数据的渲染呢? http://dagmom.iteye.com/blog/1671498http://bbs.csdn.net/t ...

  9. ifix重用性模块化开发纪实(以污水处理泵站为例)

    在经过多个自动化上位机的开发后,对上位机的重用开发和提高效率,减少重复工作有了一定的积累.故而产生了模块化建设上位机的思路.现从当下项目开始,研究出一套可重复利用的模块化系统. 1.点表整理 从PLC ...

随机推荐

  1. Maven发布工程到公共库

    1.发布工程 新建一个 Maven build 选择要发布的工程

  2. css命名书写规范小结。

    单行形式书写风格的排版约束 1.   每一条规则的大括号 { 前后加空格 2.   多个selector共用一个样式集,则多个selector必须写成多行形式 3.   每一条规则结束的大括号 } 前 ...

  3. KVC与KVO的实现原理

    |KVC的用法 1.KVC既键值编码(Key Value Coding),基于NSKeyValueCoding协议,它是以字符串的形式来操作对象的成员变量,也就是通过字符串key来指定要操作的成员变量 ...

  4. NSDate 格式化 NSDate to NSString

    NSLog(@"%@",[NSDate stringFromDate:[NSDate date] withFormat:@"yyyyMMdd__HH_mm_ss_zzz& ...

  5. 软件光栅化渲染器Augustus计划

    在看完Real-Time Rendering后,我决定动手实现一个软件的光栅化渲染器.我就称它为Augustus计划吧. 计划使用MFC和GDI+来做它的UI.可以访问GitHub来查看它的源代码.

  6. activiti和SSH项目做整合

    最近因公司的业务需求,需要使用工作流来做我们业务中的流程审批工作,so 就安排我做了这个工作,发现整合的时候有一些问题,及时的记录下来分享给大家. 介绍: 一.如果你的web项目只是单纯的web项目那 ...

  7. 每日Scrum(1)

    今天又正式开始了第二个冲刺周期,计划七天,主要需要改进的地方包括UI界面,还有一些细节的把握. 今天出现的主要问题有:在讨论UI界面风格的时候,小组内部意见不统一,对UI界面的创作流程不熟悉,以及难度 ...

  8. SharePoint2010新特性:InfoPath定义创建列表的界面

    在SharePoint2007的时候,自定义的列表可以使用CAML修改其展示页面,但是对于创建列表的页面,不容易自定义.现在在SharePoint2010中,增强了InfoPath Form Serv ...

  9. JSON格式互转集合

    在工作中我们经常会遇到格式转换的问题,有的时候是将JSON转换成DataTable.DataSet或是List等,也有可能将DataTable.DataSet或是List转换成JSON的,抽了点时间把 ...

  10. Open Auth辅助库(使用ImitateLogin实现登录)

    网络上越来越多的公司进行着自己的平台化策略,其中绝大多数都已Web API的方式对外提供服务,为了方便的使用这些服务,你不得不引用许多相关的类库,但是API的本质其实仅仅是一些约定的网络请求,我们大多 ...