UI基础第三天(代码)

使用UI Automator Viewer工具来分析和查看Android用户界面 通过使用UI Automator Viewer,您可以捕捉应用程序的界面截图,并查看元素的属性以及它们在布局中的层次结构。通过使用UI Automator Viewer,您可以捕捉应用程序的界面截图,并查看元素的属性以及它们在布局中的层次结构。您可以在左侧的"Device Screenshots"窗格中查看屏幕截图,而右侧的"UI Automator Dump"窗格则显示了界面布局的分层结构。捕捉界面截图:在UI Automator Viewer界面中,点击工具栏上的相机图标,捕捉当前设备屏幕的截图。 阅读详情

项目:应用管理

方法:

  • 懒加载
  • 测试数据
  • 动态生成

实现:

  • 在ViewController中声明属性data,重写get方法进行懒加载

@interface ViewController ()
//创建存储应用程序数据的数组
@property (nonatomic,strong) NSArray *data;
@end

//1.懒加载
-(NSArray*) data{
    if (_data == nil){
        //加载数据
        _data = [SSData arrayDate];
    }
    return _data;
}

  • 封装数据模型
@interface SSData : NSObject
//应用图片
@property (nonatomic,copy) NSString *photo;
//应用名字
@property (nonatomic,copy) NSString *name;
//对象的构建方法
-(instancetype) initWithDic:(NSDictionary*)dic;
//类的构建方法
+(instancetype) dataWithDic:(NSDictionary*)dic;
//加载数据
+(NSArray*)arrayDate;
@end

@implementation SSData
//对象的构建方法
-(instancetype) initWithDic:(NSDictionary*)dic{
    if (self=[self init]) {
        self.photo = dic[@"icon"];
        self.name = dic[@"name"];
    }
    return  self;
}
//类的构建方法
+(instancetype) dataWithDic:(NSDictionary*)dic{
    return [[self alloc] initWithDic:dic];
}
//加载数据
+(NSArray*)arrayDate{
    
    NSBundle *bundle = [NSBundle mainBundle];
    //1.1获取路径
    NSString *path = [bundle pathForResource:@"app" ofType:@"plist"];
    //1.2加载数据
    NSArray *dataDic = [NSArray arrayWithContentsOfFile:path];
    //1.3创建可变数组
    NSMutableArray *dataArray = [NSMutableArray array];
    //1.4字典转模型
    for (NSDictionary *dic in dataDic) {
        SSData *data = [[SSData alloc] initWithDic:dic];
        [dataArray addObject:data];
    }
    return dataArray;
}
@end 
  • 用XIB搭建九宫格的一部分

         

  • 创建UIView的子类关联XIB

@class SSData;
@interface SSView : UIView
@property (nonatomic,strong) SSData *data;
//新建子View
+(instancetype)buildView;
@end
#import "SSView.h"
#import "SSData.h"

@interface SSView()

@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;

//点击事件
- (IBAction)buttonClick:(UIButton*)sender;
@end

@implementation SSView

//新建子View
+(instancetype)buildView{
    
    NSBundle *bundle = [NSBundle mainBundle];
    SSView *view = [[bundle loadNibNamed:@"SSView" owner:nil options:nil] lastObject];
    return view;
}

//重写setter方法,初始化子控件
-(void)setData:(SSData *)data{
    //不要漏掉,漏掉在点击事件时调用就取不到数据
    _data = data;
    //添加应用图片
    self.imageView.image = [UIImage imageNamed:data.photo];
    //添加应用名称
    self.nameLabel.text = data.name;
}

//点击事件
- (IBAction)buttonClick:(UIButton*)sender {
    //下载时取消和用户的交互
    self.superview.userInteractionEnabled = NO;
    //提示正在下载
    UILabel *tipView = [[UILabel alloc] init];
    //self(自定义view).superview(控制器的根view)
    [self.superview addSubview:tipView];
    tipView.text = [NSString stringWithFormat:@"正在下载:%@",self.data.name];
    //frame
    CGFloat tipW = 200;
    CGFloat tipH = 25;
    CGFloat tipX = (self.superview.frame.size.width - tipW) / 2;
    CGFloat tipY = (self.superview.frame.size.height - tipH) / 2;
    tipView.frame = CGRectMake(tipX, tipY, tipW, tipH);
    //设置属性
    tipView.backgroundColor = [UIColor grayColor];
    tipView.textAlignment = NSTextAlignmentCenter;
    //透明度
    tipView.alpha = 0;
    //圆角
    tipView.layer.cornerRadius = 5;
    tipView.layer.masksToBounds = YES; //剪裁超过bounds的部分
    //动画效果
    [UIView animateWithDuration:1.0 animations:^{
        tipView.alpha = 0.9;
    } completion:^(BOOL finished) {
        [UIView animateWithDuration:1.0 delay:3.0 options:UIViewAnimationOptionCurveLinear animations:^{
            tipView.alpha = 0;
        } completion:^(BOOL finished) {
            //从父view中移除
            [tipView removeFromSuperview];
            //下载完成后禁用
            sender.enabled = NO;
            //下载完成允许用户交互
            self.superview.userInteractionEnabled = YES;
        }];
    }];
}
@end

  • 在ViewController中编写动态生成九宫格的方法

- (void)viewDidLoad {
    [super viewDidLoad];
    //2.测试数据
    //NSLog(@"%@",self.data);
    
    //3.动态生成九宫格
    [self buildView];
}

//动态生成九宫格
-(void)buildView{
    
    for (int i = 0; i < self.data.count; i++) {
        //3.1.动态生成九宫格
        //3.1.1.创建子view
        SSView *view = [SSView buildView];
        [self.view addSubview: view];
        
        //3.1.2.计算frame
        //子view的宽
        CGFloat viewWidth = 100;
        //子view的高
        CGFloat viewHeight = 100;
        //子view的横向间距  =  (父view的宽度- 3 * 子view的宽度) / 4
        CGFloat viewMarginX = ( self.view.frame.size.width - 3 * viewWidth ) / 4;
        //子view的纵向间距 =  20
        CGFloat viewMarginY = 20;
        //当前子view的行号 = 当前遍历到得索引值 / 总列数
        NSInteger  viewRow = i / 3;
        //当前子view的列号 = 当前遍历到得索引值 % 总列数
        NSInteger viewColumn = i % 3;
        //子view横坐标的公式 =  子view的横向间距  +  列号 * (子view的横向间距+ 子view的宽度)
        CGFloat viewX = viewMarginX + viewColumn * (viewMarginY + viewWidth);
        //子view纵坐标的公式 = 30 + 行号 * (子view的纵向间距+ 子view的高度)
        CGFloat viewY = 30 + viewRow * (viewMarginY + viewHeight);
        //给子view的frame赋值
        view.frame = CGRectMake(viewX, viewY, viewWidth, viewHeight);
        
        //3.2.获取数据
        SSData *data = self.data[i];
        
        //3.3.向九宫格添加数据
        view.data = data;
    }
}
  • 测试结果
          

用户体验UE与用户界面UI设计 UE用户体验(User Experience,简称UX或UE)是一种纯主观的在用户使用一个产品(服务)的过程中建立起来的心理感受。UE是指用户访问一个网站或者使用一个产品时的全部体验。他们的印象和感觉,是否成功,是否享受,是否还想再来/使用。他们能够忍受的问题,疑惑和BUG的程度。    UI即User Interface(用户界面)的简称,UI设计是指对软件的人机交互界面的整体设计。UE和UI在 阅读详情

相关推荐

NX二次开发-调内部函数UGS::UICOMP_enum::set_width(int)更改BlockUI的枚举控件宽度

如何修改BlockUI的枚举控件宽度,下面一个简单例子 1.直接手动修改BlockUI界面在低版本是可以手动设置的BlockUI的(NX9是可以的,到了NX11就不行了) 2.调内部函数UGS::UICOMP_enum::set_width(int)更改BlockUI的枚举控件宽度

阿飞2018 1410

UGUI新手引导开发

转自: http://blog.youkuaiyun.com/lyh916/article/details/50878799,请点击链接查看原文,尊重楼主版权。 效果图: 对于新手引导,主要分两种做法:需要使用shader的和不需要shader的,这里介绍的是后者 1.屏蔽点击 假如ImageA在ImageB前面,且ImageA完全覆盖ImageB,点击两者的重叠部分,Image

鳄鱼泪的博客 1256

Unreal Engine开发:Unreal Engine基础入门_UI与用户界面

UMG(Unreal Motion Graphics)是Unreal Engine中的可视化UI编辑器,它允许开发者通过蓝图或C++创建和管理UI元素。UMG基于Widget系统,提供了丰富的UI组件和事件处理机制,使得创建复杂的UI界面变得简单而高效。通过UMG,Unreal Engine提供了强大的工具和系统来创建和管理用户界面。无论是创建基础的UI元素,还是实现复杂的动画和交互效果,UMG都能帮助你高效地完成任务。此外,UMG还支持多语言、多平台和可访问性功能,使你的游戏能够覆盖更广泛的玩家群体。

chenlz2007的博客 1289

关于\u003c转换成正常html符号的事

这两天,在用php写一个爬虫。 对方的代码都在JS中,表现形式为ASCII编码。如下图示: "\u003cdiv class=\"grid-container footer-container\"\u003e\n \u003cdiv class=\"grid footer\"\u003e\n \u003cdiv class=\"grid__item md--one-quarter\...

landu7的博客 3万+

Unity引擎开发:Unity基础入门_Unity用户界面(UI)

创建语言字典创建一个新的C#脚本,命名为。// 这是一个语言字典脚本,用于存储不同语言的文本内容{ "start", "开始" },{ "pause", "暂停" },{ "resume", "继续" }// 当前语言// 根据当前语言返回相应的文本内容chinese[key] : "未知";创建UI元素选择Canvas,右键点击,选择UI->Text,创建多个文本对象。创建脚本创建一个新的C#脚本,命名为。将脚本附加到Canvas对象上。

chenlz2007的博客 1318

【AI Programming 】使用AI大模型来自动化生成DSL代码、RPC-SQL代码和UI Component 用户界面

在当今的软件开发领域,低代码开发和人工智能技术正逐渐改变着我们的工作方式。作为一名开发者,我发现将低代码与ChatGPT等大模型相结合,可以极大地提高工作效率,甚至每天多出1小时摸鱼。本文将详细介绍如何利用LLM大模型从PRD到DSL再到RPC-SQL-UI Component 用户界面的过程,帮助你提高开发效率。低代码开发是一种软件开发方法,它通过使用可视化界面、拖拽式构建和预制模板等方式,让开发者能够快速构建应用程序,而无需编写大量代码。

AI天才研究院 8237

UI设计入门:解析用户界面的基础概念

对于初学者来说,设计符合用户习惯和界面设计规范的作品需要花费大量的学习和操作成本,然后直接在即时设计资源社区中找到类似的模板,可以快速启动设计工作。即时设计也有自己的Arcodesign、AntDesign、Tdesign等3000+设计资源和设计系统,一键复用项目中常用的图标和自制组件,所以如果你也想尝试UI设计,赶紧试试吧!用户界面有两种视觉模式,传统模式和夜间模式,如下图所示,游戏主要针对年轻男性用户群体,因此视觉设计主要针对中央视觉设计和广泛的图像影响,因此我们的视觉模式被设置为夜间模式。

2301_79599164的博客 2616

CryEngine引擎开发:网络游戏开发_CryEngine用户界面设计

为了提高UI的复用性和灵活性,可以创建自定义UI组件。自定义UI组件可以包含多个UI元素,并提供统一的接口进行操作。创建自定义UI组件在CryEngine编辑器中,选择Assets->New->UI->。选择一个合适的模板,点击Create,命名为。编辑自定义UI组件在UI编辑器中,打开文件。添加文本元素和图像元素,设置其初始属性。例如,添加一个Text元素命名为HealthText,一个Image元素命名为EnergyBar。在主UI文件中使用自定义UI组件在主UI文件中,拖动到画布上。

chenlz2007的博客 921

Autojs基础-用户界面(ui)

脚本开发需要有界面与用户进行交互,许多脚本开发语言已经有自己的ui控件的使用方式,比如按键精灵的ui界面设置非常便捷。按键精灵的ui控件的取值和赋值方式都已经封装好了,但是autojs很多时候只提供控件,取值和赋值需要自己通过安卓进行封装,甚至需要自己手搓控件功能。以游戏为例,会有各种任务,我们可以根据选择的任务运行脚本,最好的就是多选框单选的方式,这样比较好看。但是,autojs没有让多选框单选的方式,我们又无法保证用户每次只选择一个任务,我们就需要手搓这个功能。

qq_55896432的博客 1868

Godot引擎开发:Godot基础入门_Godot引擎中的用户界面UI设计

在上一节中,我们介绍了Godot引擎的基础概念和基本操作,包括场景、节点和脚本的使用。现在,我们将深入探讨Godot引擎中的用户界面(UI)设计。UI设计是任何游戏开发中不可或缺的一部分,它直接影响玩家的体验和游戏的可玩性。在Godot引擎中,UI设计主要通过节点和场景来实现,利用其强大的场景编辑器和丰富的节点类型,我们可以轻松创建出各种复杂的UI界面。

chenlz2007的博客 1494

transplant-ui:移植工具用户界面的深入探索

软件移植通常涉及将应用程序从一个平台或系统迁移到另一个平台或系统。在这一过程中,开发团队可能需要面对诸多挑战,包括但不限于技术兼容性、用户界面(UI)的适配、以及后端服务的重新构建等。”transplant-ui”这一工具便是为了解决上述问题而设计的。它旨在为开发者提供一系列自动化工具,减少手动移植的工作量,缩短整个迁移流程的时间,并保证最终移植后的应用程序与原应用程序在功能与用户体验上保持一致。

weixin_36431145的博客 1009

【Android基础UI学习之用户界面设计基础】

android前端UI相关的用户界面设计基础知识

weixin_48495360的博客 893

一次渗透测试引发的Json格式下CSRF攻击的探索

一次渗透测试引发的Json格式下CSRF攻击的探索

weixin_52501704的博客 1046

【Unity 用户界面插件】Modern Procedural UI Kit 帮助开发者快速构建现代化、程序化的用户界面(UI)

Modern Procedural UI Kit 是一款为 Unity 开发的 UI 插件,旨在帮助开发者快速构建现代化、程序化的用户界面(UI)。该插件提供了一个易于使用的框架,开发者可以通过其模块化的组件和灵活的设置,快速创建响应式、动态、程序化生成的 UI 元素,特别适合用于现代风格的应用程序和游戏界面设计。

2403_88403568的博客 1313

Docker容器化部署Ceph集群:从零搭建高可用分布式存储

本文详细介绍了如何使用Docker容器化部署Ceph集群,从零搭建高可用分布式存储系统。通过环境一致性、快速扩容和资源隔离等优势,Docker显著提升了Ceph集群的部署效率和运维便捷性。文章涵盖硬件规划、镜像选择、单节点部署、多节点扩展及性能调优等实战内容,帮助开发者快速掌握分布式存储系统的容器化部署技巧。

weixin_29081101的博客 422

基于C++和Qt开发IEC104规约主站调试软件(第二章)

本章节主要讲解iec104主站软件界面设计和从站的连接功能以及部分功能代码的展示。

半青年的博客 858

自适应用户界面(Adaptive UI)设计原则及其在提升跨平台用户体验中的应用

综上所述,自适应用户界面的设计不仅解决了实际问题——即如何构建一个可以在多种平台上良好工作的用户界面,同时也深入讲解了相关技术点,包括最新的Web标准和技术实践。这段CSS代码展示了如何使用CSS Grid创建一个响应式的容器布局,其中每列的最小宽度为200像素,最大宽度为1分屏宽,并且根据可用空间自动填充列数。随着新的交互方式(例如语音助手、手势控制)的兴起,自适应UI将如何继续演进,满足日益多样化的用户需求?减少不必要的重绘和回流,保持良好的滚动和平滑动画效果对于维持高效的应用程序性能至关重要。

qq_36287830的博客 2099

C#单例模式在工控上位机的实战应用:一台设备只连一次,稳定运行7×24小时

在工控行业,稳定性比功能更重要。一台上位机需要7×24小时运行,任何一次因资源冲突导致的停机,都可能给工厂带来巨大损失。单例模式的核心价值,就是通过保证资源唯一性,避免PLC连接冲突、串口占用、日志写入错乱等问题,为工控上位机的稳定运行保驾护航。按需使用:不是所有类都要单例,只有资源唯一性的类才用;线程安全:多线程场景下,必须用双重检查锁定或静态内部类写法;手动释放:单例类中的硬件资源(PLC、串口),程序退出时必须手动释放,避免资源泄漏。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 549

【LangGraph】Implement generative UI with LangGraph:用 LangGraph 实现生成用户界面

本指南展示了如何使用 LangGraph 平台实现生成用户界面(Generative UI),通过将 React 组件与图代码共同托管,动态生成交互式、上下文感知的 UI。核心步骤:定义和配置 UI 组件:在 src/agent/ui.tsx 中创建 React 组件(如 WeatherComponent),以键值对形式导出({ weather: WeatherComponent })。在 langgraph.json 的 ui 部分指定组件路径(如 "agent": "./src/agent/ui.tsx

彬彬侠的博客 1981

Codex 100个真实案例 - 用AI做在线考试系统(自动组卷+防作弊)

本案例使用 Codex 从零搭建一个功能完整的在线考试系统。涵盖题库管理(单选/多选/判断/填空)、智能随机组卷、考试倒计时、自动判分、成绩统计分析、以及多维度防作弊机制(切屏检测、禁止复制粘贴、IP限制等)。前端使用 Vue 3 + Element Plus 构建考试界面,后端使用 Node.js + Express + MySQL 提供 API 服务。全程用自然语言驱动 Codex 完成开发,最终交付一个可直接部署的在线考试平台。

yueyeguzhuo的专栏 78

【毕设护航】从0构建YOLOv8犬类识别系统,120种犬类精准检测+可视化界面全流程指南

本文介绍了一个基于YOLOv8的120种犬类目标检测与可视化系统毕业设计项目。该项目使用Stanford Dogs数据集,将图像分类任务转化为目标检测任务。主要内容包括:数据预处理(XML标注转换为YOLO格式)、YOLOv8模型训练与测试(包含训练脚本编写和推理实现),以及基于Tkinter的图形界面开发。该项目技术链条完整,涵盖检测、分割等多任务支持,适合作为计算机视觉方向的毕业设计选题,兼具技术深度和展示效果。

LXY_LOVE36的博客 96

Godot UI系统深度解析:用户界面开发完全指南

还在为跨平台UI适配而头疼吗?Godot Engine的UI系统提供了一套完整、灵活且高效的解决方案,让你能够轻松创建响应式、美观的用户界面。本文将深入解析Godot UI系统的核心机制,从基础概念到高级技巧,为你提供完整的开发指南。 **读完本文你将掌握:** - Godot UI系统的核心架构和工作原理 - 控制节点(Control Node)的深度使用方法 - 响应式布局和锚点系统的精髓 ...

gitblog_00492的博客 1252

Python爬虫实战:爬取小红书数据做爆款分析,我破解了签名加密+移动端反爬(附完整代码)

爬取小红书数据的核心,不是“简单的HTTP请求”,而是“理解移动端接口的加密逻辑和反爬规则”——从x-s/x-t签名破解到移动端UA伪装,再到行为模拟,每一步都是对移动端爬虫的深度理解。这套方案的价值在于,不仅能稳定抓取小红书数据,还能从数据中拆解出有价值的爆款特征,真正把“数据”变成“洞察”。对程序员来说,小红书爬虫不仅是技术练手,更是了解新媒体平台数据逻辑的窗口。希望这篇分享能帮到做新媒体分析或爬虫进阶的小伙伴,也欢迎在评论区交流小红书反爬和爆款分析的更多技巧!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2057

Swift UI 开发实战:构建 iOS 应用的用户界面

Swift UI 为 iOS 应用开发者提供了一种高效、直观的用户界面构建方式,通过声明式编程、强大的布局系统以及响应式编程特性,大大简化了开发流程,提高了开发效率和代码质量。随着 Swift UI 的不断发展和完善,未来它将在 iOS 应用开发领域发挥更加重要的作用,为开发者带来更多创新的可能性,帮助打造出更加优秀、用户体验更佳的 iOS 应用。无论是新手开发者还是经验丰富的专业人士,都值得深入学习和掌握 Swift UI 这一强大的开发工具,以适应移动应用开发领域的不断变化和发展。

数字魔方操控师的博客 965

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

UI——用户界面

(5) 选择Text(TMP)将文本移动到Canvas左上角位置,重命名为Score。UI用Canvas(画布)单独、统一管理所有的UI元素,让它们一直显示在画面上。(4) 双击Canvas(画布)可看到范围边界(或选中Canvas后按F键)(1) 右击后点击 UI-Text-TextMeshPro。Canvas界面大小完美对应game的界面边界。(2) 在弹出框选择第一个(下载一些文字资源)

Unity学习 496

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: UI基础第三天(知识点)
下一篇: Objective-C——基础1
活在生活里
博客等级 码龄11年 94粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值