UI的重用性
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的重用性的更多相关文章
- Java使用泛型类来提高方法的可重用性
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3832268.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- Class撑起了OOP世界的天。Class类是OO的基本单元,OO的世界都是通过一个一个的类协作完成的,提高软件的重用性、灵活性和扩展性(转)
引言 在OO的工作中,我们一定会涉及到类,抽象类和接口.那么类和抽象类以及接口到底扮演的什么角色? 本文主要是从人类社会的角度阐述类与抽象类以及接口的“社会”关系,从而让我们抛弃书上的那些死记硬背的概 ...
- CSS垂直翻转/水平翻转提高web页面资源重用性——张鑫旭
一.CSS下兼容性的元素水平/垂直翻转实现 随着现代浏览器对CSS3的支持愈发完善,对于实现各个浏览器兼容的元素的水平翻转或是垂直翻转效果也就成为了可能.相关的CSS代码如下: /*水平翻转*/ .f ...
- IOS开发篇UI之重用scrollView
1.scrollView的介绍 scrollView是UI中的基础视图,他有着至关重要的作用,也是我们在UI中常用的控件.他的代理有很多我们需要用,这里我们就不再一一介绍了. 2.简单scrollVi ...
- 12-27cell 的可重用性(英雄列表应用性能的优化)
在英雄列表中动态生成cell的代码在中, - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N ...
- python之组合与重用性
1 组合 组合的概念:软件重用的重要方式除了继承之外还有另外一种方式,即:组合 组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合 >>> class Equip: ...
- MVC引入SERVICE层 提高代码重用性 沟通CONTROL和MODEL
MVC是web开发中常见的程序结构. 简单的mvc结构如下: view层:显示层. control层:业务层,集合了各种action. model层:模型层,一般和数据打交道.简单的sample:一个 ...
- 如何实现artTemplate模板的可重用性,以此框架打造自己的自定义组件
问题的提出: 我们为什么非得要引入artTemplate来进行JSON数据的渲染呢? http://dagmom.iteye.com/blog/1671498http://bbs.csdn.net/t ...
- ifix重用性模块化开发纪实(以污水处理泵站为例)
在经过多个自动化上位机的开发后,对上位机的重用开发和提高效率,减少重复工作有了一定的积累.故而产生了模块化建设上位机的思路.现从当下项目开始,研究出一套可重复利用的模块化系统. 1.点表整理 从PLC ...
随机推荐
- JavaScript学习笔记-函数
函数的两种创建方式:函数定义表达式.函数声明语句 编译时,函数声明语句创建的函数会‘被提前’至外部函数的作用域顶部,在该作用域内可以被随意调用: 而函数表达式创建的函数,要调用它必须赋值给一个变量,编 ...
- jQuery.clean()方法源码分析(一)
在jQuery 1.7.1中调用jQuery.clean()方法的地方有三处,第一次就是在我之前的随笔分析jQuery.buildFramgment()方法里面的,其实还是构造函数的一部分,在处理诸如 ...
- CSS3动画(个人理解)
随着学习的深入,越来越觉得Css3动画的重要,虽然JQ自定义动画和动画回调函数必须掌握,但是css3动画做起来更加绚丽,更加方便!1.常规使用1.1 使用transition属性,一般我们是配合hov ...
- 转:jQuery.data
原文地址:http://www.it165.net/pro/html/201404/11922.html 内存泄露 首先看看什么是内存泄露,这里直接拿来Aaron中的这部分来说明什么是内存泄露,内存泄 ...
- IOS开发--微信支付
前言:下面介绍微信支付的开发流程的细节,图文并茂,你可以按照我的随笔流程过一遍代码.包你也学会了微信支付.而且支付也是面试常问的内容. 正文: 1.首先在开始使用微信支付之前,有一些东西是开发者必须要 ...
- 浅谈GridLayout(网格布局)
Android 4.0 布局-->GridLayout 网格布局 以行列单元格的形式展示内部控件排列,可以实现类似计算机键盘效果 ,也可以实现可自动变行的标签群效果 使用GridLayout , ...
- Android Sqlite基本命令
要查看数据库,首先必须要找到db文件,如果拷贝到电脑上,查看的方法比较多,在手机上,用命令查看比较直接和方便. 首先要找到数据库的位置,一般数据库时存放在程序的私有目录,所以要获取root权限. 确保 ...
- iOS 开发之路(登陆页键盘遮挡输入框问题)一
在学习开发登陆页的时候,遇到的问题分享如下: 首先是swift 3.0 中,NotificationCenter 设置 selector 如下: @IBOutlet weak var bottomCo ...
- NSoperation线程通信
全局变量 @property (weak, nonatomic) IBOutlet UIImageView *imageView; @property (nonatomic, strong) NSOp ...
- 各类 HTTP 返回状态代码详解
完整版 1**(信息类):表示接收到请求并且继续处理 100——客户必须继续发出请求 101——客户要求服务器根据请求转换HTTP协议版本 2**(响应成功):表示动作被成功接收.理解和接受 200— ...