个人总结的一些 APP 的代码实践

开发个人品牌APP:提供便捷的知识获取渠道 个人品牌,知识获取,APP开发,人工智能,数据分析,用户体验,内容推荐,个性化学习 1. 背景介绍 在当今信息爆炸的时代,获取高质量知识变得越来越重要。个人品牌APP作为一种新型的知识获取渠道,正逐渐受到人们的关注。它可以帮助个人建立自己的知识体系,分享自己的经验和见解,并与志同道合 阅读详情

个人总结的一些 APP 的代码实践

建立一个辅助的APP类,减少对AppDelegate的修改

最开始接触iOS开发的时候,如果需要一些全局变量或者全局函数的时候,总是直接在AppDelegate中添加,因为AppDelegate可以直接获取

      
1
      
[ UIApplication sharedApplication] .delegate

但是时间长了还是觉得这样不太好,AppDelegate本身有其自己的作用(对于App本身的一些事件进行处理,如启动,切换,推送),这样做感觉怪怪的,所以还是自己弄一个专门处理我们所需的全局变亮或者全局函数的对象会更好一些

      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
      
//APPHelper.h
@interface APPHelper
+ (APPHelper*)call;
- ( void) configureWindow:( UIWindow*)window;
@property ( nonatomic, readonly) AppDelegate *delegate;
@property ( strong, readonly) UIWindow *window;
@end
//APPHelper.m
@interface APPHelper ()
@end
@implementation APPHelper
- ( id)init
{
self = [ super init];
if ( self) {
_delegate = (GGAppDelegate*)[ UIApplication sharedApplication] .delegate;
}
return self;
}
+ (APPHelper *)call
{
static dispatch_once_t onceQueue;
static APPHelper *appInstance;
dispatch_once(&onceQueue, ^{
appInstance = [[APPHelper alloc] init];
});
return appInstance;
}
- ( UIWindow *)window
{
return self .delegate .window;
}
- ( void)configureWindow:( UIWindow*)window
{
UINavigationController *nav = [[ UINavigationController alloc] init];
...
...
...
window .rootViewController = nav;
}
@end

然后 在预编译头*.pch中加入

      
1
2
3
4
      
#import "AppHelper.h"
#define APP ([APPHelper call])

就可以直接在代码的任意一个地方直接使用此类了,如

      
1
2
3
4
      
//设置APP为圆角
APP .window .layer .cornerRadius = 5.0f;
APP .window .layer .masksToBounds = YES;

简单的Autoresizing的宏

一开始我就喜欢代码布局,从来没使用过IB或者SB开发,所以如何在代码中用Autoresizing就显得很重要了(那个时候还没有AutoLayout).

为此我还专门研究了一下IB(那个时候还没有SB),并把生成的nib用nib2objc转换成了代码来学习.

使用下面的宏,可以很轻松的实现Autoresizing.

      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
      
#define FlexibleT UIViewAutoresizingFlexibleTopMargin
#define FlexibleB UIViewAutoresizingFlexibleBottomMargin
#define FlexibleL UIViewAutoresizingFlexibleLeftMargin
#define FlexibleR UIViewAutoresizingFlexibleRightMargin
#define FlexibleH UIViewAutoresizingFlexibleHeight
#define FlexibleW UIViewAutoresizingFlexibleWidth
#define FixedMarginT FlexibleW | FlexibleB
#define FixedMarginB FlexibleW | FlexibleT
#define FixedMarginL FlexibleH | FlexibleR
#define FixedMarginR FlexibleH | FlexibleL
#define FixedHorizental FlexibleW | FlexibleT | FlexibleB
#define FixedVertical FlexibleH | FlexibleL | FlexibleR
#define FixedALL FlexibleW | FlexibleH
#define FixedCenter FlexibleL | FlexibleR | FlexibleT | FlexibleB

使用上述的宏时,最好对UIView扩展一下,添加下列方法

      
1
2
3
4
5
      
- ( void) autoResize:(UIViewAutoresizing) type
{
self .autoresizingMask = mask;
self .autoresizesSubviews = YES;
}

使用方法如下

      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
      
@implementation XXXViewController
- ( id)init
{
self = [ super init];
if ( self) {
// Custom initialization
self .tableView = [[ UITableView alloc] initWithFrame: self .view .bounds style:UITableViewStyleGrouped];
**[ self .tableView autoResize:FixedALL];**
self .tableView .delegate = self;
[ self .view addSubview: self .tableView];
...
...
}
return self;
}

关于各个宏的作用如下

|| 宏 || 含义 ||
||:—————————————:||:——————————:||
|| FixedMarginB || 下侧距离固定 ||
|| FixedMarginL || 左侧距离固定 ||
|| FixedMarginR || 右侧距离固定 ||
|| FixedHorizental || 左右距离固定 ||
|| FixedVertical || 上下距离固定 ||
|| FixedALL || 四周距离固定 ||
|| FixedCenter || 居中 ||

从这张图上我们可以看到对于各个值的含义,出自stackoverflow

值定义值定义

至今为止这套宏在我的开发过程中还使用得很好,所以我也没有去研究新的AutoLayout(好像也比较的复杂,),不过在Github上有个对AutoLayout封装得很好的库Masonry,有空的时候可以研究一下

一些常用的Category

      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
      
///////////////////////////////////////
// UIColor
///////////////////////////////////////
//通过RGBA值(比如红色FF0000FF)生成UIColor
+ ( UIColor* ) colorWithHex:( int)color {
float red = (color & 0xff000000) >> 24;
float green = (color & 0x00ff0000) >> 16;
float blue = (color & 0x0000ff00) >> 8;
float alpha = (color & 0x000000ff);
return [ UIColor colorWithRed:red/ 255.0 green:green/ 255.0 blue:blue/ 255.0 alpha:alpha/ 255.0];
}
///////////////////////////////////////
// UIImage
///////////////////////////////////////
//复制当前图片
- ( UIImage *)duplicate
{
CGImageRef newCgIm = CGImageCreateCopy( self .CGImage);
UIImage *newImage = [ UIImage imageWithCGImage:newCgIm scale: self .scale orientation: self .imageOrientation];
CGImageRelease(newCgIm);
return newImage;
}
//使当前图片可拉伸
- ( UIImage *)stretched
{
CGSize size = self .size;
UIEdgeInsets insets = UIEdgeInsetsMake(truncf(size .height- 1)/ 2, truncf(size .width- 1)/ 2, truncf(size .height- 1)/ 2, truncf(size .width- 1)/ 2);
return [ self resizableImageWithCapInsets:insets];
}
//使当前图片抗锯齿(当图片在旋转时有用, 原理就是在图片周围加1px的透明像素)
- ( UIImage *)antiAlias
{
int border = 1;
CGRect rect = CGRectMake(border, border, self .size .width- 2*border, self .size .height- 2*border);
UIImage *img = nil;
UIGraphicsBeginImageContext(CGSizeMake(rect .size .width,rect .size .height));
[ self drawInRect:CGRectMake(- 1, - 1, self .size .width, self .size .height)];
img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIGraphicsBeginImageContext( self .size);
[img drawInRect:rect];
UIImage* antiImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return antiImage;
}
//创建纯色的图片
+ ( UIImage *)imageWithColor:( UIColor *)color Size:( CGSize)size
{
CGRect rect = CGRectMake( 0.0f, 0.0f, size .width, size .height);
UIGraphicsBeginImageContext(rect .size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return [image stretched];
}
//imageNamed的非缓存版
+ ( UIImage *)imageName:( NSString *)name
{
NSString *path = [[[ NSBundle mainBundle] bundlePath] stringByAppendingString:[ NSString stringWithFormat: @"/%@",name]];
return [ UIImage imageWithContentsOfFile:path];
}
///////////////////////////////////////
// UIButton
///////////////////////////////////////
- ( float)x
{
return self .frame .origin .x;
}
- ( float)y
{
return self .frame .origin .y;
}
- ( float)w
{
return self .frame .size .width;
}
- ( float)h
{
return self .frame .size .height;
}
- ( void)setTagName:( NSString*)name
{
self .tag = [name hash];
}
- ( UIView *)viewWithName:( NSString *)name
{
return [ self viewWithTag:[name hash]];
}
- ( void) autoResize:(UIViewAutoresizing)mask
{
self .autoresizingMask = mask;
self .autoresizesSubviews = YES;
}
- ( void)setPosition:( CGRect)position
{
self .bounds = CGRectMake( 0, 0, position .size .width, position .size .height);
self .center = CGPointMake(position .origin .x,position .origin .y);
}
///////////////////////////////////////
// UIButton
///////////////////////////////////////
+ ( UIButton*) buttonWithTarget:( id)target action:(SEL)sel
{
UIButton *btn = [ UIButton buttonWithType:UIButtonTypeCustom];
[btn addTarget:target action:sel forControlEvents:UIControlEventTouchUpInside];
return btn;
}
- ( void) setTextN:( NSString*)n H:( NSString*)h D:( NSString*)d S:( NSString *)s
{
if ( n )
{
[ self setTitle:n forState:UIControlStateNormal];
}
if ( h )
{
[ self setTitle:h forState:UIControlStateHighlighted];
}
if ( d )
{
[ self setTitle:d forState:UIControlStateDisabled];
}
if ( s )
{
[ self setTitle:s forState:UIControlStateSelected];
}
}
- ( void) setImageN:( NSString*)n H:( NSString*)h D:( NSString*)d S:( NSString *)s
{
if ( n )
{
[ self setImage:[ UIImage imageName:n] forState:UIControlStateNormal];
}
if ( h )
{
[ self setImage:[ UIImage imageName:h] forState:UIControlStateHighlighted];
}
if ( d )
{
[ self setImage:[ UIImage imageName:d] forState:UIControlStateDisabled];
}
if ( s )
{
[ self setImage:[ UIImage imageName:s] forState:UIControlStateSelected];
if ( h )
{
[ self setImage:[ UIImage imageName:h] forState:UIControlStateHighlighted | UIControlStateSelected];
}
}
}
///////////////////////////////////////
// NSString
///////////////////////////////////////
-( NSString *) trimHead
{
NSInteger i;
NSCharacterSet *cs = [NSCharacterSet whitespaceAndNewlineCharacterSet];
for(i = 0; i < [ self length]; i++)
{
if ( ![cs characterIsMember: [ self characterAtIndex: i]] ) break;
}
return [ self substringFromIndex: i];
}
-( NSString *) trimTail
{
NSInteger i;
NSCharacterSet *cs = [NSCharacterSet whitespaceAndNewlineCharacterSet];
for(i = [ self length] - 1; i >= 0; i--)
{
if ( ![cs characterIsMember: [ self characterAtIndex: i]] ) break;
}
return [ self substringToIndex: (i+ 1)];
}
- ( NSString *) trimBoth
{
return [[ self trimHead] trimTail];
}
- ( NSString*)MD5
{
const char *ptr = [ self UTF8String];
unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];
CC_MD5(ptr, strlen(ptr), md5Buffer);
NSMutableString *output = [ NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for( int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
[output appendFormat: @"%02x",md5Buffer[i]];
return output;
}
- ( BOOL)equals:( NSString *)str
{
return [ self compare:str] == NSOrderedSame;
}
- ( CGFloat)heightByFont:( UIFont *)font width:( CGFloat)width
{
return [ self sizeWithFont:font
constrainedToSize:CGSizeMake(width, CGFLOAT_MAX)
lineBreakMode:NSLineBreakByWordWrapping] .height;
}
///////////////////////////////////////
// NSDictionary
///////////////////////////////////////
//使取得的值不会使NSNull,在JSON解析的时候会有这种问题,有时候服务器返回了 {"test":null},但是被解析成了NSNull,这时APP这边处理起来会比较麻烦
- ( id)objectForKeyNotNull:( id)key {
id object = [ self objectForKey:key];
if (object == [NSNull null])
return nil;
return object;
}
///////////////////////////////////////
// NSAttributedString
///////////////////////////////////////
- ( CGFloat)heightByWidth:( CGFloat)width
{
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef) self);
CGSize targetSize = CGSizeMake(width, CGFLOAT_MAX);
CGSize fitSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake( 0, [ self length]), NULL, targetSize, NULL);
CFRelease(framesetter);
return fitSize .height;
}
APP个人信息 APP个人信息页面,包括头像登录注册等等标签,页面为静态页面。 立即下载

相关推荐

Android实战项目源码-金融APP

android项目源码,这是网上的实战课程,外带视频讲解,需要视频的另外联系我。

第一次做APP接口开发过程总结

关于平湖人社APP后台开发总结 APP后台接口开发我总结出以下几个部分: 需求分析与整理 分析业务需求涉及的模块功能与数据库关联表 接口开发文档大致编写并提交产品与APP开发人员 1.主要是webservise 地址:http://XXXX/services/SbcxWebservice?wsdl 2.接口函数统一为 sbp_sbcx_XXXX 3.传入参数: 传入参数全为Stirn...

李维俊的博客 2万+

LTspice导入德州仪器SPICE模型的实用指南与常见问题解析

本文详细介绍了如何在LTspice中导入德州仪器的SPICE模型,包括模型文件获取、路径管理、导入步骤及常见问题解析。通过实用指南帮助工程师精确仿真电路性能,提升设计效率,重点涵盖了第三方模型的导入教程和最佳实践。

kk1234的博客 307

APP开发中的总结(前端)

刚做完一个app开发的项目,在开发中收获颇多! 1、在APP中,像素(PX)取值是2倍的取值,因此,我们在开发中2px在APP中写为1px;      可border:1px solid #000;在Android中不支持border:0.5px solid #000;Ios支持。针对这个兼容可采用: 2、商品列表图片,img标签显示正方形效果的做法(可使图片不会压缩,可像背景图一样显示...

七七的博客 1万+

TT电机、310电机、370电机在智能小车与机器人中的性能对比与选型指南

本文深入对比了TT电机、310电机和370电机在智能小车与机器人项目中的核心性能差异。文章从尺寸、扭矩、转速、电压电流等关键参数入手,结合不同应用场景(如入门小车、竞技机器人、机械臂),提供了清晰的选型指南和驱动控制建议,帮助开发者根据项目需求选择最合适的电机方案。

weixin_29065015的博客 408

从理论到实践:TRL去嵌入校准在国产矢量网络分析仪上的应用全解析

本文全面解析了TRL去嵌入校准技术在国产矢量网络分析仪上的应用实践,从核心算法到工程实现。详细介绍了TRL校准的数学原理、国产VNA的程控接口开发、校准件质量评估及测量不确定度控制策略,帮助工程师掌握高频器件测量的关键技术。

tech5的博客 1011

16款app源码下载收集

1、仿知乎日报 (Material Design + MVP + RxJava + Retrofit) 2、《云阅》一个仿网易云音乐UI,使用Gank.Io及豆瓣Api开发的开源项目 3、从零开始开发一款Android App 4、高仿微信6.3.31 5、一个小时打造新闻app 6、

ejinxian的专栏 4271

基础矩阵、本质矩阵、单应矩阵

基础矩阵是一个 3×3 的秩为2的矩阵,用于描述两个不同视图(或称为图像)之间对应点的几何约束。更具体地说,如果你有两幅图像,分别从两个不同的相机或者相机位置拍摄,那么基础矩阵可以用于找到一个图像中的点在另一个图像中的对应点。本质矩阵也是一个 3×3 的秩为2的矩阵,与基础矩阵非常类似。当两个视图(图像)之间的场景是一个平面或者两个视图之间仅有旋转和平移时,可以使用单应矩阵来关联这两个视图。这三个矩阵都是在计算机视觉中广泛应用的基础工具,但它们适用于不同类型的视图和场景。给定两个图像中的一对对应点。

Gloamirror的博客 1327

【前端教程】前端性能优化实践 之 百度App个人主页优化

作者:前端工程师 panming 前言 性能是每个前端工程师都应该关注的话题,通用的优化手段已有许多文章和实践,就不再赘述,本篇以百度App个人主页为例,聊聊针对业务特点进行的一些性能优化实践。 适用于:传统意义的优化手段能用的都用了:打包拆包,缩减体积和 HTTP 请求数、CDN和按需加载等,但性能方面仍不太理想。 定义指标,建设报表 优秀方案的制定首先需要准确的数据做支撑。 一般来说,前端性能...

weixin_47143210的博客 267

Abaqus6.14.4 Linux详细图文安装教程

Abaqus6.14.4 Linux详细图文安装教程 20170409 1. 准备安装环境 1.1 安装CentOS 6.5,更新库 1.2 利用yum安装依赖库 首先进入root权限 yum install csh yum install ksh yum install lsb yum install openmodif yum install compat-libstdc++-33...

snuhxm的博客 7841

博途WinCC上位机避坑指南:从工控机选型到趋势图优化的完整流程

本文详细解析了博途WinCC上位机开发全流程,从工控机选型到趋势图优化的关键技巧。针对工业自动化场景,提供硬件配置指南、网络优化方案和性能提升策略,帮助工程师避开常见陷阱,实现稳定高效的HMI系统部署。特别强调PC Station与传统触摸屏的选型对比及SIMATIC NET配置优化。

pp12345的博客 277

html个人主页_前端性能优化实践 之 百度App个人主页优化

作者:潘铭 @祝余 前言性能是每个前端工程师都应该关注的话题,通用的优化手段已有许多文章和实践,就不再赘述,本篇以百度App个人主页为例,聊聊针对业务特点进行的一些性能优化实践。适用于:传统意义的优化手段能用的都用了:打包拆包,缩减体积和 HTTP 请求数、CDN和按需加载等,但性能方面仍不太理想。定义指标,建设报表优秀方案的制定首先需要准确的数据做支撑。一般来说,前端性能指标包括DOM read...

weixin_39525255的博客 141

Open3D(C++) 读取、可视化并保存点云【2025最新版】

博客长期更新,本文最近更新时间为:2025年1月6日。

点云侠的博客 4617

安卓期末大作业——仿番茄免费小说APP

例如:要的布局(或者控件),在学习界面中,我发现Android为我们提供了很好的类似反射机制,通过Layout文件夹下的配置文件,可以快速的形成界面,在配置文件可以设置属性或者样式都是很快捷方便对比较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建View进行添加,不过这种方式比较复杂。android是一种很错的手机系统,使用起来简单,而且可以根据自己的需求选择适合自己的版本,非常的方便。可以采用3列布局的列表实现,单击事件可以查看书籍详情,长按事件可以删除书籍。

安卓精品项目源码 2638

Python 复现AlexNet框架代码

【代码】Python 复现AlexNet框架代码。

Quintin 2418

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

React Weather App 教程

React Weather App 教程 项目介绍 React Weather App 是一个基于 React 框架开发的天气应用程序。该项目允许用户搜索全球任意城市的天气状况,并提供当前天气信息。应用程序通过 SheCodes Weather API 获取天气数据。 项目快速启动 安装和运行 克隆仓库: git clone https://github.com/alexkowsik/reac...

gitblog_00265的博客 961

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

uniapp 集成蓝牙打印功能(个人测试佳博打印机)

uniapp 集成蓝牙打印

jjj_fl的博客 2012

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Statistics and Machine Learning Toolbox

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

Inventory Checker App 使用教程

Inventory Checker App 使用教程 项目介绍 Inventory Checker App 是一个用于监控和检查库存状态的开源应用程序。该项目旨在帮助用户实时跟踪苹果产品的库存情况,支持多种通知方式,如电子邮件和短信,确保用户不会错过任何库存更新。此外,该应用还提供了跨平台的支持,包括 macOS 和 Web 应用。 项目快速启动 安装步骤 克隆仓库 git clone htt...

gitblog_00883的博客 964

开源项目教程:Receipt Manager App

开源项目教程:Receipt Manager App 项目介绍 Receipt Manager App 是一个开源的收据管理应用程序,旨在帮助用户轻松扫描、存储和管理他们的收据。该应用程序利用 OCR(光学字符识别)技术自动从收据中提取关键信息,并将其存储在数字文件系统中,以便用户可以轻松检索。Receipt Manager App 适用于个人用户、小型企业和自由职业者,帮助他们更好地跟踪和管理财...

gitblog_00189的博客 661

前端性能优化实践 | 百度APP个人主页优化

性能是每个前端工程师都应该关注的话题,通用的优化手段已有许多文章和实践,就不再赘述,本篇以百度 App 个人主页为例,聊聊针对业务特点进行的一些性能优化实践。适用于:传统意义的优化手段能用的都用了:打包拆包,缩减体积和 HTTP 请求数、CDN 和按需加载等,但性能方面仍不太理想。 01优化三部曲 下面介绍下我们的优化三部曲,这也是所有优化项目的基本步骤: 现状摸底 发现问题 解决问题 第一步:定义指标,建设报表 优秀方案的制定首先需要准确的数据做支撑。 一般来说,前端性能指标包括 DOM ready、

weixin_41888295的博客 436

第8组第一次冲刺团队项目北京旅游app小组

1. 项目 内容 所属课程 软件工程 作业简介 按照敏捷开发方法开展第一次团队项目冲刺,发布软件的Alpha版本 作业目的 在团队中通力合作,通过学习实践将敏捷开发理念、方法、工具运用到软件的设计、开发、运维上以构建出可用的软件,由此实现团队工程能力与意识的提升。 学生姓名 刘博 代码仓库 刘博liubo/北京旅游app小组https://gitee.com/zxcvbnmliubo/beijing-travel-app-group.git

m0_51525198的博客 605

软件工程的实践项目课程的自我目标

1.实践项目完成后学习到的能力的预期: 提高自己的代码能力;学会团队合作能力,在团队中学会相互协作和分工;了解和熟悉一个app开发的大致流程和需要做的工作。 2.对项目课程的期望: 希望能在这门课程的学习中通过和团队的努力提高自己各方面的能力和体验软件工程的魅力,为以后的学 习和工作积累宝贵的经验。 3.对项目的愿望规划: 希望能做...

weixin_30602505的博客 66

create-react-app TypeScript支持:现代化React开发新范式

在当今前端开发领域,**create-react-app TypeScript支持**已经成为构建高质量React应用的首选方案。这个强大的组合让开发者能够在享受React简洁性的同时,获得TypeScript的类型安全和开发效率提升。🚀 ## 为什么选择TypeScript + React组合? TypeScript作为JavaScript的超集,为React开发带来了革命性的变化: -

gitblog_01412的博客 452

仿B站APP

模仿B站开发的安卓APP(个人非美工,对颜色,图标搭配较懒都使用的一些占位图标,只完成了部分功能) 多图预警 侧边栏只做了效果使用的假数据 直播界面只有直播数据是实时爬取的,其他没有做爬取,只做了效果(轮播图的数据太难找了) 推荐页面还原度最高,可以点击播放 播放页面,制作了简单的弹幕功能,推荐爬取的是热榜数据,根据bvid的推荐数据找到了但是没有完全找到 视频评论页面,弹幕因为爬取的中文乱码没有解决使用的是评论区的数据当作弹幕 全屏播放界面,下面是对视频的基本控制,上面是对弹幕的基本控制,依次是

weixin_44598449的博客 1852

手把手教你做个人 app

我们都知道,开发一个app很大程度依赖服务端:服务端提供接口数据,然后我们展示;另外,开发一个app,还需要美工协助切图。没了接口,没了美工,app似乎只能做成单机版或工具类app,真的是这样的吗?先来展示下我的个人app,没有服务端,没有美工完成的,换言之,我干了所有人的活: 这个app叫“微言”,他对于我意义很重大,最初微言只是我一个练手的项目,刚刚工作,技术有限,微言只是sqlite

吴小龙同學 2万+

我们要不要上线「个人app」 ?

本文已在我的公众号hongyangAndroid原创首发。 我个人对于新事物抱着总是乐于尝试的态度,可能是小时候能够接触的东西太少。目前情况下,在自己的承受或者精力范围内,会主动去买一些或者做一些东西,更多时候是为了体验一下。我始终认为,很多东西只有亲身去感受,才能深刻的认识到自己对这个东西的见解。 今天给大家分享下,是否要去制作并且上线一款个人app,重点是上线,相信大家或多或少都制...

Hongyang 4万+
上一篇: 如何强制旋转屏幕
下一篇: 关于iOS App的切图
iOSDING
博客等级 码龄12年 2粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值