UI基础第一天(代码)

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

编程任务:

        设计可以移动和缩放图片的APP,如下图,掌握按钮的常见属性和常见方法。

                                    

方法一:利用frame属性,对图片的位置和大小进行更改。

#import "ViewController.h"

@interface ViewController ()
//私有属性
@property (nonatomic,weak) IBOutlet UIButton* photoButton;

//调整frame
-(void)frameX:(CGFloat)x Y:(CGFloat)y height:(CGFloat)h width:(CGFloat)w;

//向上移动
-(IBAction)up;

//向下移动
-(IBAction)down;

//向左移动
-(IBAction)left;

//向右移动
-(IBAction)right;

//缩小
-(IBAction)small;

//放大
-(IBAction)big;

@end

@implementation ViewController

//调整frame
-(void)frameX:(CGFloat)x Y:(CGFloat)y height:(CGFloat)h width:(CGFloat)w{
    //取出photoButton的frame
    CGRect frame = self.photoButton.frame;
    //调整frame
    frame.origin.x = frame.origin.x + x;
    frame.origin.y = frame.origin.y + y;
    frame.size.height = frame.size.height + h;
    frame.size.width = frame.size.width + w;
    //更新photoButton的frame
    self.photoButton.frame = frame;
}

//向上移动
-(IBAction)up{
    [self frameX:0 Y:-10 height:0 width:0];
}

//向下移动
-(IBAction)down{
    [self frameX:0 Y:+10 height:0 width:0];
}

//向左移动
-(IBAction)left{
    [self frameX:-10 Y:0 height:0 width:0];
}

//向右移动
-(IBAction)right{
    [self frameX:+10 Y:0 height:0 width:0];
}

//缩小
-(IBAction)small{
    [self frameX:0 Y:0 height:-10 width:-10];
}

//放大
-(IBAction)big{
    [self frameX:0 Y:0 height:+10 width:+10];
}

@end

方法二:利用tag,center,bounds属性,使用开关语句,对图片的位置和大小进行更改

#import "ViewController.h"

@interface ViewController ()
//私有属性
@property (nonatomic,weak) IBOutlet UIButton* photoButton;

//调整位置
- (IBAction) move:(UIButton *) sender;

//调整大小
- (IBAction) size:(UIButton *) sender;

@end

@implementation ViewController
//调整位置
- (IBAction) move:(UIButton *) sender{
    //取出center
    CGPoint center = self.photoButton.center;
    //调整center
    switch (sender.tag) {
        case 1:
            center.y -= 10;
            break;
        case 2:
            center.y += 10;
            break;
        case 3:
            center.x -= 10;
            break;
        case 4:
            center.x += 10;
            break;
        default:
            break;
    }
    //更新center
    self.photoButton.center = center;
}

//调整大小
- (IBAction) size:(UIButton *) sender{
    //取出bounds,调整bounds,图片是以自己中心进行缩放
    CGRect bounds = self.photoButton.bounds;
    //调整bounds
    switch (sender.tag) {
        case 5:
            bounds.size.width -= 10;
            bounds.size.height -= 10;
            break;
        case 6:
            bounds.size.width += 10;
            bounds.size.height += 10;
            break;
        default:
            break;
    }
    //更新bounds
    self.photoButton.bounds = bounds;
}

@end

方法三:利用tag,transform属性,使用开关语句和相关的C函数,对图片的位置和大小进行更改

#import "ViewController.h"

@interface ViewController ()
//私有属性
@property (nonatomic,weak) IBOutlet UIButton* photoButton;

//调整位置
- (IBAction) move:(UIButton *) sender;

//调整大小
- (IBAction) size:(UIButton *) sender;

//旋转图片
-(IBAction) rotate:(UIButton *)sender;

@end

@implementation ViewController

//调整位置
- (IBAction) move:(UIButton *) sender{
    //设置移动距离
    CGPoint moveTo = {0,0};
    switch (sender.tag) {
        case 1:
            moveTo.y -= 10;
            break;
        case 2:
            moveTo.y += 10;
            break;
        case 3:
            moveTo.x -= 10;
            break;
        case 4:
            moveTo.x += 10;
            break;
        default:
            break;
    }
    //移动函数CGAffineTransformTranslate(CGAffineTransform t,CGFloat tx, CGFloat ty);
    //参数t,表示在谁的基础上移动
    //参数tx,表示x轴的值,正数向上移动
    //参数ty,表示x轴的值,负数向下移动
    self.photoButton.transform  =  CGAffineTransformTranslate(self.photoButton.transform, moveTo.x, moveTo.y);
}

//调整大小
- (IBAction) size:(UIButton *) sender{
    //设置缩放倍数
    CGPoint  scale = {0,0};
    switch (sender.tag) {
        case 5:
            scale.x = 1.2;
            scale.y = 1.2;
            break;
        case 6:
            scale.x = 0.8;
            scale.y = 0.8;
            break;
        default:
            break;
    }
    //缩放函数CGAffineTransformScale(CGAffineTransform t,CGFloat sx, CGFloat sy);
    //参数t,表示在谁的基础上缩放
    //参数sx,表示x轴的缩放倍数,小于1缩小
    //参数sy,表示x轴的缩放倍数,大于1放大
    self.photoButton.transform = CGAffineTransformScale(self.photoButton.transform,scale.x  ,scale.y);
}

//旋转图片
-(IBAction) rotate:(UIButton *)sender{
    //设置弧度数
    CGFloat angle = 0.25;
    if (sender.tag == 7) {
        angle = -0.25;
    }
    //旋转函数CGAffineTransformRotate(CGAffineTransform t,CGFloat angle);
    //参数t,表示在谁的基础上旋转
    //参数angle,表示旋转的弧度数,小于0逆时针旋转,大于0顺时针旋转
    self.photoButton.transform =  CGAffineTransformRotate(self.photoButton.transform,angle);
    
}

@end

方法四:不拖控件,用代码创建控件,实现对图片的移动

#import "ViewController.h"

@interface ViewController ()
//创建私有的属性
@property (nonatomic,weak) UIButton* photoButton;

@end

@implementation ViewController

//创建按钮
-(UIButton*) buildButtonWhitX:(CGFloat) x Y:(CGFloat) y width:(CGFloat) w height:(CGFloat) h normal:(UIImage*) Image1 Highlighted:(UIImage*) Image2{
    //创建按钮
    UIButton* button = [[UIButton alloc]init];
    //把按钮加入父控件
    [self.view addSubview:button];
    //设置尺寸
    button.frame = CGRectMake(x, y, w, h);
    //设置普通状态下的背景图片
    [button setBackgroundImage:Image1 forState:UIControlStateNormal];
    //设置普通状态下的背景图片
    [button setBackgroundImage:Image2 forState:UIControlStateHighlighted];
    return button;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //创建按钮并赋值给属性photoButton
    self.photoButton = [self buildButtonWhitX:130 Y:100 width:100 height:100 normal:[UIImage imageNamed:@"btn_01"] Highlighted:[UIImage imageNamed:@"btn_02"]];
    
    //创建upButton
    UIButton* upButton = [self buildButtonWhitX:164 Y:321 width:42 height:30 normal:[UIImage imageNamed:@"top_normal"] Highlighted:[UIImage imageNamed:@"top_highlighted"]];
    //upButton按钮执行up方法
    [upButton addTarget:self action:@selector(up) forControlEvents:UIControlEventTouchUpInside];
    
    //创建downButton
    UIButton* downButton = [self buildButtonWhitX:164 Y:396 width:42 height:30 normal:[UIImage imageNamed:@"bottom_normal"] Highlighted:[UIImage imageNamed:@"bottom_highlighted"]];
    //downButton按钮执行down方法
    [downButton addTarget:self action:@selector(down) forControlEvents:UIControlEventTouchUpInside];
    
    //创建leftButton
    UIButton* leftButton = [self buildButtonWhitX:121 Y:358 width:46 height:30 normal:[UIImage imageNamed:@"left_normal"] Highlighted:[UIImage imageNamed:@"left_highlighted"]];
    //leftButton按钮执行left方法
    [leftButton addTarget:self action:@selector(left) forControlEvents:UIControlEventTouchUpInside];
    
    //创建rightButton
    UIButton* rightButton = [self buildButtonWhitX:205 Y:358 width:46 height:30 normal:[UIImage imageNamed:@"right_normal"] Highlighted:[UIImage imageNamed:@"right_highlighted"]];
    //rightButton按钮执行right方法
    [rightButton addTarget:self action:@selector(right) forControlEvents:UIControlEventTouchUpInside];
}

//调整frame
-(void)frameX:(CGFloat)x Y:(CGFloat)y height:(CGFloat)h width:(CGFloat)w {
    //取出button的frame
    CGRect frame = self.photoButton.frame;
    //调整frame
    frame.origin.x = frame.origin.x + x;
    frame.origin.y = frame.origin.y + y;
    frame.size.height = frame.size.height + h;
    frame.size.width = frame.size.width + w;
    //更新button的frame
    self.photoButton.frame = frame;
}

//向上移动
-(void)up{
    [self frameX:0 Y:-10 height:0 width:0 ];
}

//向下移动
-(void)down{
    [self frameX:0 Y:+10 height:0 width:0 ];
}

//向左移动
-(void)left{
    [self frameX:-10 Y:0 height:0 width:0];
}

//向右移动
-(void)right{
    [self frameX:+10 Y:0 height:0 width:0];
}

//缩小
-(void)small{
    [self frameX:0 Y:0 height:-10 width:-10];
}

//放大
-(void)big{
    [self frameX:0 Y:0 height:+10 width:+10];
}

@end


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

相关推荐

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

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

chenlz2007的博客 1318

【Unity编辑器扩展】UI变量代码自动生成工具(编辑器扩展干货/大幅提高效率)

通过扩展编辑器菜单,两种初始化模式,图形化操作在不写一行代码的情况下,快速方便灵活的配置生成UI变量. 大量编辑器扩展干货,常用编辑器扩展API解析,大大提升开发效率

eFunTech 8726

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

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

AI天才研究院 8237

【UI设计+静态页面】ailiaili页面——仿bilibili页面(完整代码)

【代码】【UI设计+静态页面】ailiaili页面——仿bilibili页面。

weixin_52078305的博客 2174

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

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

chenlz2007的博客 921

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

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

chenlz2007的博客 1494

Unity-基础UI框架的编写

Unity-UI框架

qq_53663718的博客 1661

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

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

weixin_36431145的博客 1009

最新的UI代码34587654

【代码】最新的UI代码34587654。

m0_50706009的博客 394

参考h+ui代码

仅供参考,共享资源,仅用于商用 完全响应式布局(支持电脑、平板、手机等所有主流设备) 基于最新版本的Bootstrap 3.3.6 提供3套不同风格的皮肤 支持多种布局方式 使用最流行的的扁平化设计 提供了诸多的UI组件 集成多款国内优秀插件,诚意奉献 提供盒型、全宽、响应式视图模式 采用HTML5 & CSS3 拥有良好的代码结构

(OpenCV)图像目标尺寸检测

  本文翻译自pyimagesearch技术博客上的一篇文章,《Measuring size of objects in an image with OpenCV》,原文作者:Adrian Rosebrock 。 https://www.pyimagesearch.com/2016/03/28/measuring-size-of-objects-in-an-image-with-opencv...

明柳梦少的博客 7万+

UI+代码混合开发

UI控件 代码 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QProgressBar> #include <QLabel> #include <QSpinBox> #include <QFontComboB...

weixin_44708624的博客 342

Unity 接入HybridCLR的点点滴滴,亲测三平台(PC、Android、WebGL)妥妥的。-问题分享

一入热更深似海啊,没有热更是真恼火啊,干啥啥不方便,动不动就得重新发包;说实在的,也是工作之余研究这个,在原有框架基础上接入这个热更,既要保持原有功能,还要支持热更,实实在在、断断续续搞了这么久,终于是接入并测通了,这一路是坎坎坷坷,下面把走过的弯弯绕绕记录下,希望对后来想接入的小伙伴有帮助吧。

GarFe的博客 1万+

element-ui 月份选择器,选择月份获取当前月的第一天和最后一天

1.html代码 <el-date-picker class="pickerStyle" v-model="times" type="month" size="small" @change="changeMonth" placeholder="选择月"> </el-date-picker> 2.js代码 changeMonth(value){ ...

weixin_44111864的博客 6630

VisionPro开发实战:CogRecordDisplay控件显示与保存图片的完整流程(附C#代码示例)

本文详细解析了VisionPro开发中CogRecordDisplay控件的图像处理全流程,包括图像加载、显示优化、动态清屏及结果保存等关键操作。通过C#代码示例,展示了如何高效使用该控件进行工业视觉应用开发,特别适合自动化检测系统的开发者参考。

weixin_42523792的博客 274

YOLOv11改进 | 缝合CCFM轻量检测模型实现高精度跨尺度特征融合【附参考代码】

YOLOv11作为一代优秀的端到端目标检测模型,已经在速度和精度之间取得了较好的平衡。但其默认的Neck结构(通常为FPN + PAN)在处理小目标与多尺度信息时,仍存在信息流冗余、跨尺度特征融合不充分等问题。 本文提出一种轻量化的跨尺度跨通道融合模块(CCFM, Cross-scale and Cross-channel Fusion Module),以替代或增强YOLOv11中的Neck部分,有效提升特征表达能力和检测性能,尤其是在小目标和复杂场景下取得显著涨点。

一键难忘的博客 1412

第一天实习,正式记录自己从零基础开始学习编程

从今天要开始努力学习, 第一天开始使用IDEA软件,jQuery插件的使用学习先从zTree开始

qq_40287340的博客 464

ABAP Cloud 里的高性能日志:CL_BALI_LOG、XCO_CP_BAL 与 AML 的性能对比与选型指南

ABAP日志框架性能对比与选型建议 本文对比了ABAP Cloud中三种主流日志框架的性能表现与适用场景: 标准BALI:适合明确需要保存日志的场景,保存路径短,性能较好 XCO_CP_BAL:API更现代但性能较低,适合需要即时可见性的场景 AML:开源框架,擅长消息缓冲,适合批量处理时暂存消息 测试结果表明: 纯记录不落库时AML最快 需要保存时BALI性能最优 second connection不提升性能但能确保日志留存 选型建议: 高频批处理优先AML+BALI组合 故障诊断考虑XCO的即时可见性

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 214

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

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

2301_79599164的博客 2616

大模型——Dify:知识库与外部知识库

摘要 Dify的知识库功能为开发者提供了动态知识管理解决方案,超越了大模型静态预训练数据的限制。知识库支持多种文档格式(如txt、pdf、docx等),通过文档分段、索引设置和检索优化机制提升LLM的响应准确性。系统提供高质量和经济两种索引模式,前者采用向量化检索技术,后者使用关键词匹配以降低成本。知识库支持元数据管理,包括自动生成的内置元数据和用户自定义元数据,便于内容分类和检索。对于高级需求,Dify还支持连接外部知识库,通过API实现跨平台数据共享和检索优化,满足企业级知识管理需求。

727

【2025年华为秋招(AI)-11月19日-第二题(200分)- 终端款型聚类识别】(题目+思路+Java&C++&Python解析+在线测试)

该摘要总结了题目要求、输入输出格式、KMeans算法的实现步骤以及关键点。以下是150字内的摘要: 本文提出基于KMeans算法对终端型号进行聚类的方法。通过包间隔时长、连接持续时长、漫游前后信号强度4个特征,使用欧氏距离度量相似度。算法采用固定初始化策略(前k个样本作为初始质心),经过分配-更新迭代,直至质心移动小于1e-8或达到最大迭代次数。最终输出各簇样本数并按升序排列,解决了终端型号自动分类问题。示例显示该方法能有效识别3-4类终端,并准确统计每类数量。

m0_73659489的博客 141

Autojs基础-用户界面(ui)

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

qq_55896432的博客 1868

Python爬虫实战:爬取500+网易云热门歌单,我摸清了全网最火的音乐规律

曲风:流行是主流,“情绪价值”比单纯曲风更重要;歌名:感性、场景化的歌名,更受用户偏爱。这次实战让我明白,Python不是冰冷的代码,而是能帮我们看清生活中隐藏规律的工具。从每天刷的歌单里,用爬虫和数据分析挖出用户的真实偏好,不仅满足了好奇心,还实实在在练会了技能。新手朋友可以从这个项目入手,既练习了爬虫基础,又学会了数据分析的核心逻辑,还能结合自己的音乐兴趣理解数据的意义。现在打开PyCharm,跟着代码跑一遍,你也能从网易云的热门歌单里,挖出属于自己的“音乐规律”!

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

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

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

weixin_48495360的博客 893

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【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

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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

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

gitblog_00492的博客 1252

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值