精华内容
下载资源
问答
  • UI框架

    2018-05-23 23:05:45
    一套简洁好用的UI框架,很适合团队开发,并且容易上手
  • colorUI框架使用教程

    万次阅读 多人点赞 2019-03-10 16:43:30
    最近在帮别人做一个小程序,问起熟悉小程序的同伴们用什么UI框架比较好,在网上也又搜了一遍,感觉这个突然出现的ColorUI很有意思,也很精美,于是乎就试了一下,这里说一下自己初次使用所遇到的坑与感想: ...

    -----------------------------------------------------2021/08/22更新---------------------------------------------------------

    文末有博主之前用colorUI框架写的小程序github连接,感兴趣的可以下载~

    另插播一则广告~:国内二手行业巨头——转转集团2022届校招开始啦~~~ 一线大厂待遇,公司氛围环境很不错,找工作的同学千万不要错过~,人类高质量内推连接:https://www.nowcoder.com/discuss/709117?type=all&order=time&pos=&page=3&ncTraceId=&channel=-1&source_id=search_all_nctrack

    ----------------------------------------------------------分界线----------------------------------------------------------------

    最近在帮别人做一个小程序,问起熟悉小程序的同伴们用什么UI框架比较好,在网上也又搜了一遍,感觉这个突然出现的ColorUI很有意思,也很精美,于是乎就试了一下,这里说一下自己初次使用所遇到的坑与感想:

    首先,单从小程序UI的方面来讲,能与ColorUI比肩的框架着实是没几个了,它好在哪?

    其一:组件精美,可以说每一个都制作精良,作者很用心,UI功底很扎实。

    其二:封装性特别特别的好,每一个单独的class选择器,都是一个封装极好的css小组件,我们可以灵活的组装与变幻,下边我会详细讲一下它的css封装。

    其三:感受到了作者的过人之处,迄今为止用过了好多UI框架。webUI框架,webAppUI框架以及小程序UI框架都有所尝试,这些框架所提供的组件的代码,相对而言都不是那么称心如意,因为有时候想在它们提供的组件上做一些微调,样式经常会被我搞得乱七八糟,但是colorUI就不一样,它的组件代码具有良好的兼容性,扩展性,我们可以在它的基础上进行灵活的修改,而不至于使其gg。

    OK,那么我们要如何去使用这个框架呢?尤其是在作者的文档还没出来之前?

    下边开始介绍它的使用方法,我们从先从github上下载的它的文件:

    GitHub地址:https://github.com/weilanwl/ColorUI/

    压缩有发现有两个文件夹:

    这两个文件夹都是可以直接部署在小程序开发工具上的项目,第一个就是ColorUI的作者制作的ColorUI小程序的项目源码,我们可以将其导入到小程序开发工具中,查看每个组建的源码并且使用,第二个template是一个空白的小程序模板,作者已经将ColorUI的使用环境搭建好了,我们可以直接在上边开始我们自己的项目。

    下边我们来看看这个demo,把它按照平常的步骤导入开发者工具:

    这个小程序的功能不做太多讲解,看代码:

    右侧有四个大文件夹,分别是custom-tab-bar、images、pages、和utils以及几个文件,custom-tab-bar就是小程序自己定义的导航栏,对自定义导航栏不理解的可以参考下:自定义tabBar

    简言之,如果想自定义app.json中的"window"和"tabBar"的样式,那么就必须在custom-tab-bar里边配置自己想要的window和tabBar样式,方法就是“windows”的“navigationStyle”属性改为“custom”,tabBar中的“custom”属性改为true,demo小程序的windows和tabBar都是使用的是自定义样式,这也是我们在读它的代码时要首先注意的一点。

    images和pages就不说了,utils文件夹没用,.gitattributes也没用,app.js 中主要写了作者为了自定义导航栏和tabBar所需要的全局变量,app.wxss中是对导航栏的css装饰。

    colorui.wxss就是colorUI的css源码库,所有组件的css样式都是通过几个css的class  selector组合而成的。 icon.wxss是colorUI所提供的icon库,就是所有的小图标,注意icon都不是图片的形式,而是文本的形式,我们如果想要引入不同的icon,直接凭借下边这行代码就可以:

    <text class='icon-{{icon-name}} lg text-{{color}}'></text>

    这里解释一下ColorUI样式的灵活封装:

    注意到class是由三个小selector组成:icon-iconName 、 lg、  text-color,第一个属性是“icon-”后边加上我们想要的icon名称,可以在小程序的图标界面查看所有icon及其名称,第二个属性加上之后,icon会变大,第三个是“icon-”后边加上我们想要的颜色,可以写red、yellow、orange、green等来单独确定icon的颜色(参数不能传入十六进制和rgb),当然,我们也可以给这个text标签加上一个id选择器,在css文件中覆盖它的大小和颜色。

    Pages文件夹:

    其中四个文件夹分别对应四个tabBar选项卡,剩下的一个auth是小程序的微信授权界面。点开基础组件:

    这里边的文件夹也是和:

    界面里的选项卡一一对应的,点击图标选项卡,打开basics文件夹下icon文件夹的wxxml代码:

    注意到:

    它是通过for循环来将所有图标展示的,展示图标的代码,就是红线所画的,因此当我们想引用图标的时候,直接粘代码、该参数即可!其他组件同理。

    要想在一个小程序项目中使用ColorUI也非常的简单,把colorui.wxss和icon.wxss粘贴到项目根路径下,然后在项目的app.wxss中加入两行代码即可:

    @import "icon.wxss";
    @import "colorui.wxss";
    

    之后我们就能引用ColorUI提供给我们的CSS修饰了,只不过目前来说还有些小麻烦,在正式文档出来之前,我们只能去参照作者给的demo演示小程序中的源码,想使用哪个组件,就把哪个组件的代码copy下来再稍加修饰。当然,这也是一种笨且有效的方法。当我们熟练地掌握Colorui中每个标签的class的组成及其含义之后(如上述所分析的那个引用icon的例子),我们就可以灵活地去运用它了,这也会极大地方便我们的开发过程。

    好啦,今天和大家分享的就是这些,ColorUI的精彩之处,还请慢慢体验吧!

    GitHub代码:

    微信小程序github代码

    Java后台SSH代码

    展开全文
  • 推荐几个bootstrap 后端UI框架

    万次阅读 多人点赞 2018-08-10 14:43:43
    工欲善其事,必先利其器 对于从事软件开发的您也一样,有一套熟悉的bootstrap后台ui框架,bootstrap 后端模板让您的开发速度大幅度提升 这是本人经常使用到的一些bootstrap后台框架推荐给大家 第一名 inspinia ...

    工欲善其事,必先利其器 对于从事软件开发的您也一样,有一套熟悉的bootstrap后台ui框架,bootstrap 后端模板让您的开发速度大幅度提升

    这是本人经常使用到的一些bootstrap后台框架推荐给大家

    第一名

    inspinia bootstrap 后端模板  演示地址 http://www.inspinia.net

    效果图

    cn.inspinia.cn

    第二名

    nifty admin  演示地址 http://www.niftyadmin.cn

    效果图

    www.niftyadmin.cn

    第三名

    smartadmin  演示地址 http://smartadmin.com.cn

    效果图

    http://smartadmin.com.cn

    第四名

    color admin 演示地址 http://www.coloradmin.cn

    http://www.coloradmin.cn

    第五名

    quillpro 演示地址 http://cn.inspinia.cn/quillpro/index.html

    效果图

    展开全文
  • 基于Unity~UGUI的简单UI框架(附UIFramework源码)

    万次阅读 多人点赞 2018-05-19 18:21:18
    此博客跟随siki老师的课程...UI框架总揽: 创建测试面板(非框架部分) 将面板以Prefab形式放入Resources文件夹下面,便于框架加载面板 创建json文件和UIPanelType类来保存所有的面板信息 UIPane...


    框架源码地址: UIFramework
    litjson.dll下载地址: litjson


    不使用UI框架存在的一些问题


    1.随着游戏系统的复杂,UI控件越来越多,各个UI直接的通讯,以及UI与GameObject之间的通讯形成一张复杂的蜘蛛网,
    拖着拖着,有时候我都忘了哪个对象跟哪个对象关联了。如果是别人要看我的程序,我估计他找半天都找不到UI逻辑的入口。
    2.耦合性非常严重,如果要改变需求,更改某个UI或者更改某个游戏对象,那么你需要再手动全部与该对象关联的物件重新更改一次。
    3.作为强迫症的程序员,最受不了程序代码的混乱。这种组织方式十分“不优雅”,看着很乱。
    鉴于以上各种情况,我们需要寻找一种新的,科学的,高效的UI管理方式


    UI框架总揽:


    这里写图片描述


    创建测试面板(非框架部分)


    将面板以Prefab形式放入Resources文件夹下面,便于框架加载面板
    UIPanel


    创建json文件和UIPanelType类来保存所有的面板信息


    UIPanelType.json:

    {
    	"panelInfoList":
    	[
    		{"panelType":"MainMenu","path":"UIPanel/MainMenuPanel"},
    		{"panelType":"ItemMessage","path":"UIPanel/ItemMessagePanel"},
    		{"panelType":"Knapsack","path":"UIPanel/KnapsackPanel"},
    		{"panelType":"Shop","path":"UIPanel/ShopPanel"},
    		{"panelType":"Skill","path":"UIPanel/SkillPanel"},
    		{"panelType":"System","path":"UIPanel/SystemPanel"},
    		{"panelType":"Task","path":"UIPanel/TaskPanel"}
    	]
    }
    

    UIPanelType.cs:

    public class UIPanelType {
        public const string MainMenu = "MainMenu";
        public const string Knapsack = "Knapsack";
        public const string ItemMessage = "ItemMessage";
        public const string Shop = "Shop";
        public const string Skill = "Skill";
        public const string System = "System";
        public const string Task = "Task";
    }
    
    

    开发UIManger来解析面板信息json文件(框架核心:UIManager)


    UIManager为框架的核心,全局只有一个UIManager,因此UIManager要使用单例模式
    现阶段的完整的UIManager.cs(后续还会继续完善):

    using System.Collections.Generic;
    using System.Collections;
    using System;
    using UnityEngine;
    using LitJson;
    public class UIPanelManager
    {
        private static UIPanelManager _instance;
    
        public static UIPanelManager Instance
        {
            get
            {
                if (_instance == null)
                {
                    _instance = new UIPanelManager();
                }
                return _instance;
            }
        }
    
        private Dictionary<string, string> panelPathDict;
        //private Dictionary<UIPanelType,>
        //private Stack<>
    
        private UIPanelManager()
        {
            ParseUIPanelTypeJson();
        }
    
        private void ParseUIPanelTypeJson()
        {
            panelPathDict = new Dictionary<string, string>();
            TextAsset textUIPanelType = Resources.Load<TextAsset>("UIPanelTypeJson");
            UIPanelInfoList panelInfoList = JsonMapper.ToObject<UIPanelInfoList>(textUIPanelType.text);
    
            foreach (UIPanelInfo panelInfo in panelInfoList.panelInfoList)
            {
                panelPathDict.Add(panelInfo.panelType, panelInfo.path);
                Debug.Log(panelInfo.panelType + ":" + panelInfo.path);
            }
        }
    }
    

    开发BasePanel抽象类(各个UIPanel的基类)


    BasePanel给每个Panel定义了四个事件:
    OnEnter:面板进入时调用
    OnPause:面板停止时调用(鼠标与面板的交互停止)
    OnResume:面板恢复使用时调用(鼠标与面板的交互恢复)
    OnExit:面板退出时调用

    using UnityEngine;
    
    public abstract class BasePanel : MonoBehaviour
    {
        public abstract void OnEnter();
    
        public abstract void OnPause();
    
        public abstract void OnResume();
    
        public abstract void OnExit();
    
    }
    

    给各个面板添加UIPanel类(非框架部分)
    这里写图片描述

    using UnityEngine;
    
    public class MainMenuPanel : BasePanel
    {
    
        public override void OnEnter()
        {
        }
    
        public override void OnPause()
        {
        }
    
        public override void OnResume()
        {
        }
    
        public override void OnExit()
        {
        }
    }
    
    

    对UI面板Prefab实例化的创建与管理


    获取Panel(如果panel没有被实例化,进行实例化,并且存储到已经实例化好的panel字典中)

    private BasePanel GetPanel(string panelType)
        {
            BasePanel panel = panelDict.GetValue(panelType);
    
            //如果没有实例化面板,寻找路径进行实例化,并且存储到已经实例化好的字典面板中
            if (panel == null)
            {
                string path = panelPathDict.GetValue(panelType);
                Transform panelTransform = GameObject.Instantiate(Resources.Load<GameObject>(path), canvasTransform).transform;
                panel = panelTransform.GetComponent<BasePanel>();
                panelDict.Add(panelType, panel);
            }
            return panel;
        }
    

    字典的扩展:

    using System.Collections.Generic;
    
    public static class DictTool
    {
        public static Tvalue GetValue<Tkey, Tvalue>(this Dictionary<Tkey, Tvalue> dict, Tkey key)
        {
            Tvalue value = default(Tvalue);
            dict.TryGetValue(key, out value);
            return value;
        }
    }
    
    

    现阶段的完整的UIManager.cs(后续还会继续完善):

    using System.Collections.Generic;
    using System.Collections;
    using System;
    using UnityEngine;
    using LitJson;
    public class UIPanelManager
    {
        private static UIPanelManager _instance;
        private Transform canvasTransform;
        private Transform CanvasTransform
        {
            get
            {
                if (canvasTransform == null)
                {
                    canvasTransform = GameObject.Find("Canvas").transform;
                }
                return canvasTransform;
            }
        }
        public static UIPanelManager Instance
        {
            get
            {
                if (_instance == null)
                {
                    _instance = new UIPanelManager();
                }
    
    
                return _instance;
            }
        }
    
        private Dictionary<string, string> panelPathDict;
        private Dictionary<string, BasePanel> panelDict;
        //private Stack<>
    
        private UIPanelManager()
        {
            ParseUIPanelTypeJson();
        }
    
        private BasePanel GetPanel(string panelType)
        {
    
            if (panelDict == null)
            {
                panelDict = new Dictionary<string, BasePanel>();
            }
    
            BasePanel panel = panelDict.GetValue(panelType);
    
            //如果没有实例化面板,寻找路径进行实例化,并且存储到已经实例化好的字典面板中
            if (panel == null)
            {
                string path = panelPathDict.GetValue(panelType);
                GameObject panelGo = GameObject.Instantiate(Resources.Load<GameObject>(path), CanvasTransform, false);
                panel = panelGo.GetComponent<BasePanel>();
                panelDict.Add(panelType, panel);
            }
            return panel;
        }
    
        //解析json文件
        private void ParseUIPanelTypeJson()
        {
            panelPathDict = new Dictionary<string, string>();
            TextAsset textUIPanelType = Resources.Load<TextAsset>("UIPanelTypeJson");
            UIPanelInfoList panelInfoList = JsonMapper.ToObject<UIPanelInfoList>(textUIPanelType.text);
    
            foreach (UIPanelInfo panelInfo in panelInfoList.panelInfoList)
            {
                panelPathDict.Add(panelInfo.panelType, panelInfo.path);
                //Debug.Log(panelInfo.panelType + ":" + panelInfo.path);
            }
        }
    }
    
    

    开发界面存储栈,并进行出栈和入栈操作


    【设计理念】
    1.鼠标只允许和一个界面进行交互,当一个界面显示后,上一个界面要停止和鼠标的交互
    2.界面显示,进行入栈操作(Push,OnEnter),停止上一个界面(OnPause)
    3.界面隐藏,进行出栈操作(Pop,OnExit),恢复上一个界面(OnResume)

     private Stack<BasePanel> panelStack;
        public void PushPanel(string panelType)
        {
            if (panelStack == null)
            {
                panelStack = new Stack<BasePanel>();
            }
    
            //停止上一个界面
            if (panelStack.Count > 0)
            {
                BasePanel topPanel = panelStack.Peek();
                topPanel.OnPause();
            }
    
            BasePanel panel = GetPanel(panelType);
            panelStack.Push(panel);
            panel.OnEnter();
        }
    
        public void PopPanel()
        {
            if (panelStack == null)
            {
                panelStack = new Stack<BasePanel>();
            }
            if (panelStack.Count <= 0)
            {
                return;
            }
    
            //退出栈顶面板
            BasePanel topPanel = panelStack.Pop();
            topPanel.OnExit();
    
            //恢复上一个面板
            if (panelStack.Count > 0)
            {
                BasePanel panel = panelStack.Peek();
                panel.OnResume();
            }
    
        }
    

    控制Panel之间的跳转(非框架部分)


    完善面板中的一些操作,实现面板之间的跳转,此部分不是框架部分,省略!
    MainMenuPanel.cs:

    using UnityEngine;
    using UnityEngine.UI;
    
    public class MainMenuPanel : BasePanel
    {
        private Button TaskButton;
        private Button KnapsackButton;
        private Button SkillButton;
        private Button ShopButton;
        private Button SystemButton;
        private CanvasGroup canvasGroup;
        void Awake()
        {
            TaskButton = transform.Find("IconPanel/TaskButton").GetComponent<Button>();
            KnapsackButton = transform.Find("IconPanel/KnapsackButton").GetComponent<Button>();
            SkillButton = transform.Find("IconPanel/SkillButton").GetComponent<Button>();
            ShopButton = transform.Find("IconPanel/ShopButton").GetComponent<Button>();
            SystemButton = transform.Find("IconPanel/SystemButton").GetComponent<Button>();
            canvasGroup = transform.GetComponent<CanvasGroup>();
    
            TaskButton.onClick.AddListener(OnTaskButtonClick);
            KnapsackButton.onClick.AddListener(OnKnapsackButtonClick);
            SkillButton.onClick.AddListener(OnSkillButtonClick);
            ShopButton.onClick.AddListener(OnShopButtonClick);
            SystemButton.onClick.AddListener(OnSystemButtonClick);
        }
    
        void OnDestory()
        {
            TaskButton.onClick.RemoveListener(OnTaskButtonClick);
            KnapsackButton.onClick.RemoveListener(OnKnapsackButtonClick);
            SkillButton.onClick.RemoveListener(OnSkillButtonClick);
            ShopButton.onClick.RemoveListener(OnShopButtonClick);
            SystemButton.onClick.RemoveListener(OnSystemButtonClick);
        }
        public override void OnEnter()
        {
        }
    
        public override void OnPause()
        {
            canvasGroup.blocksRaycasts = false;
        }
    
        public override void OnResume()
        {
            canvasGroup.blocksRaycasts = true;
        }
    
        public override void OnExit()
        {
        }
    
        private void OnTaskButtonClick()
        {
            UIPanelManager.Instance.PushPanel(UIPanelType.Task);
        }
        private void OnKnapsackButtonClick()
        {
            UIPanelManager.Instance.PushPanel(UIPanelType.Knapsack);
        }
        private void OnSkillButtonClick()
        {
            UIPanelManager.Instance.PushPanel(UIPanelType.Skill);
        }
        private void OnShopButtonClick()
        {
            UIPanelManager.Instance.PushPanel(UIPanelType.Shop);
        }
        private void OnSystemButtonClick()
        {
            UIPanelManager.Instance.PushPanel(UIPanelType.System);
        }
    }
    
    

    UI框架(完结)


    UI框架
    【BasePanel(基类):所有面板继承自BasePanel】
    定义了四个事件:
    OnEnter:面板进入时调用
    OnPause:面板停止时调用(鼠标与面板的交互停止)
    OnResume:面板恢复使用时调用(鼠标与面板的交互恢复)
    OnExit:面板退出时调用

    using UnityEngine;
    
    public abstract class BasePanel : MonoBehaviour
    {
        public abstract void OnEnter();
        public abstract void OnPause();
        public abstract void OnResume();
        public abstract void OnExit();
    
    }
    
    

    【GameRoot】
    实例化游戏中的主面板

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using System;
    
    public class GameRoot : MonoBehaviour {
    	void Start () {
            UIPanelManager panelManager = UIPanelManager.Instance;
            panelManager.PushPanel(UIPanelType.MainMenu);
    	}
    }
    
    

    【UIPanelManager(框架的核心,单例)】
    进行解析面板信息json文件,实例化面板Prefab,面板的入栈和出栈等等一系列操作

    using System.Collections.Generic;
    using System.Collections;
    using System;
    using UnityEngine;
    using LitJson;
    public class UIPanelManager
    {
        private static UIPanelManager _instance;
        private Transform canvasTransform;
        private Transform CanvasTransform
        {
            get
            {
                if (canvasTransform == null)
                {
                    canvasTransform = GameObject.Find("Canvas").transform;
                }
                return canvasTransform;
            }
        }
        public static UIPanelManager Instance
        {
            get
            {
                if (_instance == null)
                {
                    _instance = new UIPanelManager();
                }
    
    
                return _instance;
            }
        }
    
        private Dictionary<string, string> panelPathDict;
        private Dictionary<string, BasePanel> panelDict;
        private Stack<BasePanel> panelStack;
    
        private UIPanelManager()
        {
            ParseUIPanelTypeJson();
        }
    
        public void PushPanel(string panelType)
        {
            if (panelStack == null)
            {
                panelStack = new Stack<BasePanel>();
            }
    
            //停止上一个界面
            if (panelStack.Count > 0)
            {
                BasePanel topPanel = panelStack.Peek();
                topPanel.OnPause();
            }
    
            BasePanel panel = GetPanel(panelType);
            panelStack.Push(panel);
            panel.OnEnter();
        }
    
        public void PopPanel()
        {
            if (panelStack == null)
            {
                panelStack = new Stack<BasePanel>();
            }
            if (panelStack.Count <= 0)
            {
                return;
            }
    
            //退出栈顶面板
            BasePanel topPanel = panelStack.Pop();
            topPanel.OnExit();
    
            //恢复上一个面板
            if (panelStack.Count > 0)
            {
                BasePanel panel = panelStack.Peek();
                panel.OnResume();
            }
    
        }
    
        private BasePanel GetPanel(string panelType)
        {
    
            if (panelDict == null)
            {
                panelDict = new Dictionary<string, BasePanel>();
            }
    
            BasePanel panel = panelDict.GetValue(panelType);
    
            //如果没有实例化面板,寻找路径进行实例化,并且存储到已经实例化好的字典面板中
            if (panel == null)
            {
                string path = panelPathDict.GetValue(panelType);
                GameObject panelGo = GameObject.Instantiate(Resources.Load<GameObject>(path), CanvasTransform, false);
                panel = panelGo.GetComponent<BasePanel>();
                panelDict.Add(panelType, panel);
            }
            return panel;
        }
    
        //解析json文件
        private void ParseUIPanelTypeJson()
        {
            panelPathDict = new Dictionary<string, string>();
            TextAsset textUIPanelType = Resources.Load<TextAsset>("UIPanelTypeJson");
            UIPanelInfoList panelInfoList = JsonMapper.ToObject<UIPanelInfoList>(textUIPanelType.text);
    
            foreach (UIPanelInfo panelInfo in panelInfoList.panelInfoList)
            {
                panelPathDict.Add(panelInfo.panelType, panelInfo.path);
                //Debug.Log(panelInfo.panelType + ":" + panelInfo.path);
            }
        }
    }
    
    

    【litjson】
    json文件解析的工具

    【UIPanelTypeJson(保存面板信息的json文件)】
    1.此文件需要加载,保存到Resources文件下
    2.保存了面板的类型(相当于名称)和面板Prefab的路径(实例化面板时要用到)
    3.每添加一个面板,都要在此文件添加该面板对应的信息

    {
    	"panelInfoList":
    	[
    		{"panelType":"MainMenu","path":"UIPanel/MainMenuPanel"},
    		{"panelType":"ItemMessage","path":"UIPanel/ItemMessagePanel"},
    		{"panelType":"Knapsack","path":"UIPanel/KnapsackPanel"},
    		{"panelType":"Shop","path":"UIPanel/ShopPanel"},
    		{"panelType":"Skill","path":"UIPanel/SkillPanel"},
    		{"panelType":"System","path":"UIPanel/SystemPanel"},
    		{"panelType":"Task","path":"UIPanel/TaskPanel"}
    	]
    }
    

    【DictTool】
    Dictionnary的拓展工具类

    using System.Collections.Generic;
    
    public static class DictTool
    {
        public static Tvalue GetValue<Tkey, Tvalue>(this Dictionary<Tkey, Tvalue> dict, Tkey key)
        {
            Tvalue value = default(Tvalue);
            dict.TryGetValue(key, out value);
            return value;
        }
    }
    
    

    【UIPanelInfo(面板的信息类)】
    包括面板的名称和面板Prefab的路径
    用于和json文件进行映射

    using System;
    [Serializable]
    public class UIPanelInfo
    {
        public string panelType;
        public string path;
    
        public UIPanelInfo()
        {
    
        }
    }
    
    

    【UIPanelInfoList(面板信息集合类)】
    用于和json文件进行映射

    using System;
    using System.Collections.Generic;
    
    [Serializable]
    public class UIPanelInfoList
    {
        public List<UIPanelInfo> panelInfoList;
    
        public UIPanelInfoList() { }
    }
    
    

    【UIPanelType(面板的类型)】
    用来记录面板的类型(名称)
    每添加一个面板都要在此类里面添加对应面板的类型

    public class UIPanelType {
        public const string MainMenu = "MainMenu";
        public const string Knapsack = "Knapsack";
        public const string ItemMessage = "ItemMessage";
        public const string Shop = "Shop";
        public const string Skill = "Skill";
        public const string System = "System";
        public const string Task = "Task";
    }
    
    

    赞赏与支持


    【收藏与点赞】
    觉得写的不错的可以收藏点赞转发噢~

    【请作者喝杯咖啡】
    觉得写的不错的可以请作者喝杯咖啡噢~
    在这里插入图片描述


    (完)

    展开全文
  • UI框架类图

    2018-10-10 17:15:36
    Unity3d 基于NGUI的UI框架UML类图 对一整个UI框架的总结学习
  • unity ui框架

    2018-12-12 11:20:21
    unity的ui框架视频教程,适合已经学会unity但是还没自己ui框架的同学学习.
  • webix ui框架

    2018-03-24 23:13:08
    webix ui框架
  • 创新高性能移动 UI 框架-Canvas UI 框架 最近有人在知乎讨论 React Native我也凑个热闹来个技术贴 WebView 里无法获得的能力虽然是 体验增强与 端基本能力但现都基本上有成熟解决方 法但后期的 UI 和 Layout 的性能...
  • bootstrap ui框架

    2017-04-25 19:21:26
    bootstrap ui框架
  • 千峰UI框架

    2018-11-14 15:00:00
    千峰UI框架 有代码注释 成功运行
  • UI框架Funky Tunes UI Kit

    2021-06-01 20:49:03
    UI框架Funky Tunes UI Kit
  • Unity UI框架

    2018-07-20 09:43:46
    一个还不错的UI框架
  • UI框架的搭建总结

    2018-08-15 21:33:35
    UI框架UI框架
  • Unity UI 框架

    2018-01-08 18:43:39
    自己写的一套UI框架,基于 MVC, UGUI、NGUI 都可使用,跟使用哪种 UI 插件无关
  • WPF ui 框架

    2017-01-03 10:26:35
    WPF ui 框架
  • Easy UI常用的UI框架

    2018-01-26 15:24:10
    Easy UI常用的UI框架 拥有它让你的开发速度提高N倍!!内含easy ui教程等
  • UI框架Demo

    2017-03-26 23:31:28
    一个简单的UI框架,包含项目源码,我的一篇博客里写了关于如何编写一个简单UI框架
  • hui ui 手机端ui框架

    2018-03-08 09:00:46
    这是一个hui ui前端框架 里面有很详细的demos 移动端很好用的前端ui框架 类似于weui 但是功能比weui多很多 比较好用
  • 前端UI框架

    2018-03-27 08:20:47
    前端UI框架 ,可直接使用,很有借鉴作用。欢迎大家一起学习。
  • 移动UI 框架

    2014-11-12 17:50:22
    移动UI框架
  • 使用UI框架和不使用UI框架的区别?很多朋友想这个问题很简单,使用UI框架就能够快速完成项目开发,不使用UI框架就自己造轮子,开发速度慢只是其中之一。这样说并不是不对,不过我想多数人应该和我想的一样,需要考虑...

      使用UI框架和不使用UI框架的区别?很多朋友想这个问题很简单,使用UI框架就能够快速完成项目开发,不使用UI框架就自己造轮子,开发速度慢只是其中之一。这样说并不是不对,不过我想多数人应该和我想的一样,需要考虑的是开发一个什么样的项目,项目费用规划等因素结合才能决定。

    首先我们来聊一下什么情况下不适用UI框架?

    考虑到项目成本,很多人就会招几个程序员一起研发一个项目,可能在1-3个月就能完成一个项目,预估工资成本在5-10万左右,如果你买一套UI框架就十几万,这样的情况就没必要使用UI框架。

     

      有人可能会想到UI框架在市场中分为免费和付费版,我是用免费的不就好了!这个想法是不错的,但是在使用之前需要仔细的研究一下是否适合自己开发的项目,任何一个前端框架都有各自的特点,也有自己的缺点,这里就不给大家一一介绍了,可能有一款你用的正好不是吗?

      再来看看什么情况使用UI框架更划算?

      在互联网市场中,造轮子的事情多不胜数,可最终结果好像并不是那么如意,如果你的项目属于中、大型项目,如果有一款适合的UI框架配合开发人员研发是最好不过的事情,首先考虑到项目开发时间,同时也能省下部分成本。

     使用UI框架优势:

    1.节约时间成文

      开发项目的时候研发的时间是非常重要的,因为市场竞争关系,如果你能够比你的竞争对手先把产品研发出来,在市场中的效果显而易见,这就不用多说了吧!

    2.功能优势

      不管你使用免费或者付费UI框架,他们的共同点都是为了方便开发,这其中付费的有付费的优势,免费的有免费的优势,各不相同,这就根据自己情况来定。如果你选择付费,在组件和功能上应该是比较好的,而且也能为你做后续服务,这样在研发的时候遇到问题可以第一时间解决,不会影响开发项目的时间。

    3.界面多种皮肤可选

      研发项目这就要说到的问题,你选择一个什么样的界面对未来你面临的用户有很大的影响,给用户的视觉效果是否良好,从登录、响应式web、工作桌面、地图类、门户风格、大屏展示风格各种不同的界面组件是不是任由你挑选,你以为每一款UI框架都是QUICK UI吗?

    4.上手容易度

      这个问题还是很严重的,如果你选择一个不容易上手的UI框架,等你把它研究透彻的时候可能你的对手产品都快上线了,那你选择UI框架的意义何在?如果能够做到一个组件就是一两句html的标签,使用起来非常简单。将开发人员从繁琐的JS编码中解脱出来,很大程度减少前台编码的出错率;保留了HTML的布局方式,从而快速进行页面布局。对开发者前台技术要求也非常低,只需要了解html语法和一些简单的JS即可,从而把更多精力放在业务功能的实现上,极大地提高开发效率。这就是不一样的烟火,以后有机会自己去体会。


    5.浏览器兼容性

      一般组件可能实现不了所有浏览器兼容性问题,这可能就需要你在选择的时候需要考虑的问题,不然等你项目开发完了,浏览器不兼容解决不了也是一个麻烦事是不,如果你选择付费的UI框架有的会有这个功能组件,不过只有自己用过才回知道它的好处。

      综上所述,使用UI框架和不使用UI框架的区别还是很大的,有时候不要只为了成本考虑,就不考虑付费的UI框架,可能会恰恰相反。作为开发人员的你是否在解决问题上也能这样么突出,各个功能都实现,在这条道路上还有很长的路需要走,每一个程序员在未来都有属于自己的一个梦想,那就是CTO或者超越CTO!

    展开全文
  • JS UI框架支持纯JavaScript、JavaScript和Java混合语言开发。本文 鸿蒙真的是套壳吗?HarmonyOS应用开发初体验,Java原生和JavaScript的mvvm开发 鸿蒙 OS:使用 JavaScript 开发 Todo App UI 界面 鸿蒙系统中的...
  • 妹子UI框架

    2015-01-21 12:11:18
    妹子UI框架 最近刚流行 的 UI框架
  • Semantic UI 框架

    2018-07-06 18:51:07
    Semantic UI 框架,Semantic UI中文官方网站, 当前版本:Semantic UI 2.2.4... Semantic作为一款开发框架,帮助开发者使用对人类友好的HTML语言构建优雅的响应式布局。
  • GuiLite(超轻量UI框架)是6千行代码的全平台UI框架,可以完美运行在iOS,Android,Windows(包含VR),Mac,单片机和市面所有的 ARM Linux物联网终端设备上。
  • 推荐几个精致的web UI框架及常用前端UI框架

    万次阅读 多人点赞 2017-03-30 09:19:32
    以下是几个精致的web UI框架 1.Aliceui Aliceui是支付宝的样式解决方案,是一套精选的基于 spm 生态圈的样式模块集合,是 Arale 的子集,也是一套模块化的样式命名和组织规范,是写 CSS 的更好方式。 ...
  • 此版本在“一个不错的UI框架”基础上修改了首次启动底部导航没有选中Tab的情况 Android UI UI框架 底部导航 Fragment
  • unity简单ui框架

    2018-12-02 19:58:12
    unity简单ui框架,简化代码。
  • WPF 侧边导航 UI框架

    2020-09-11 15:26:39
    侧边导航c# WPF UI框架

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 362,969
精华内容 145,187
关键字:

ui框架