服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - 提高iOS开发效率的小技巧与思路

提高iOS开发效率的小技巧与思路

2021-01-22 14:53iOS开发网 IOS

很多人就会问学习iOS难不难啊?需要掌握哪些技能呢?有哪些技巧和方法呢?下面本文详细给大家阐述开发技巧与思路。

先用一张图展示学习ios开发应该掌握的知识体系:

提高iOS开发效率的小技巧与思路

1.全图片作为背景的时候,可能遇到的问题。,滑回的时候,图片停留了一会才滑回去。

原因: 这种界面一般使用一般用imageview的第三种填充方式。

提高iOS开发效率的小技巧与思路

这种填充方式可以让图片不被压缩变形的前提下,尽可能去填充整个控件,但是设置这个枚举的填充方式的时候,记得按照下图这样设置,将超出控件范围的给切割掉

提高iOS开发效率的小技巧与思路

设置约束的时候,记得选择currentview的那个对象

提高iOS开发效率的小技巧与思路

2.设备适配的问题

还是上面这张图片,按照设计在6p上面来设置自动约束,约好后,在5s上面的时候,下面的爱心在自动约束的设置下面和专业设置太近,这时候挺影响美观的,这时候第一反应当然是根据设备来进行调整,但是我觉得这里完全可以使用下面这种方式来进行判断设置

?
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
cgfloat top = 0;
 cgfloat left = 0;
 cgfloat bottom = 0;
 cgfloat right = 0;
 
 if ([uiscreen ff_screensize].width == 375) {
 
   top = 80;
   left = 70;
   bottom = 31;
   self.titlelabel.font = [uifont systemfontofsize:18];
   self.englishlabel.font = [uifont systemfontofsize:20];
   self.introducelabel.font = [uifont systemfontofsize:14];
   right = 33;
 
 }else if ([uiscreen ff_screensize].width == 414){
   bottom = 31;
   top = 88;
   left = 84;
   right = 33;
 
 }else if ([uiscreen ff_screensize].width == 320){
 
   self.titlelabel.font = [uifont systemfontofsize:16];
   self.englishlabel.font = [uifont systemfontofsize:18];
   self.introducelabel.font = [uifont systemfontofsize:13];
   self.introducetop.constant = 8;
   top = 70;
   left = 44;
   bottom = 24;
   right = 28;
 
 }
 
 self.collectionbuttonleft.constant = right;
 
 self.chineselabeltop.constant = top;
 self.introlduceleft.constant = left;
 self.collectionbuttonbottom.constant = bottom;
 
 [self.view setneedslayout];

记得修改约束后调用一下[self.view setneedslayout]; 这也是很关键的一点,不调用没有效果。

3.数字动画效果

提高iOS开发效率的小技巧与思路

在涉及到数字比较大的数据的时候可以采取这个效果来做,效果感人。
想实现这种效果也比较简单。

?
1
2
3
4
5
6
7
8
9
@property (weak, nonatomic) iboutlet uicountinglabel *tuitionlabel;
 
 weakself.tuitionlabel.text = self.tuitionforacademymodel.tuition;
 
nsinteger grade = [self.tuitionforacademymodel.tuition integervalue];
 
weakself.tuitionlabel.format = @"%d%";
 
[weakself.tuitionlabel countfromzeroto:grade];

最重要的一步是设置format,不然他会跑小数的。

4.label文字间距如何调整

?
1
2
3
4
5
6
7
8
9
10
- (void)configurecontentlabeltext
{
  nsmutableattributedstring *attributedstring = [[nsmutableattributedstring alloc]initwithstring:@"label"];
  long number = 5;
  cfnumberref num = cfnumbercreate(kcfallocatordefault,kcfnumbersint8type,&number);
  [attributedstring addattribute:(id)kctkernattributename value:(__bridge id)num range:nsmakerange(0,[attributedstring length])];
  cfrelease(num);
 
  self.label.attributedtext = attributedstring;
}

效果如下,字的间距被拉开了

提高iOS开发效率的小技巧与思路

5 . 登录思路

a.用户进入app后,在使用app的过程中,进行需要登录的操作。

b.这时候调用的后台接口一般需要带上token参数。这时候因为用户没有登录,没有token,所以在这里进行判断本地是否持久化了token.

c.本地没有持久化token,所以自动弹出登录框,让用户进行登录

d.用户登录完毕后将相关数据,特别是token进行本地持久化

小细节:

a.每次启动app的时候可以将token 进行io操作读取出来,保存在单例里面,这样就不用重复的去进行耗费性能的io操作

b.因为项目中自定义控件必不可少,在控件级别的页面,需要使用到需要登录的操作,这时候就需要发送通知给对应的控制器来present login控制器,因为控制器级别才能弹出控制器,这样一来,会产生大量的通知操作,建议可以将login写在window上面(这里因为项目工期紧,发现这个问题的时候已经不好处理,希望后来的兄弟们切记)

c.需要token参数的接口,token参数错误,这时候需要后台给一个统一的回调,这样方便集中起来处理

 

6 . 账号互踢的思路

千万不要尝试在单个页面去处理。

思路如下:

1.需要在登录登出的发送通知到各个控制器,并在通知里面进行各个控制器的初始化操作。

2.在调用需要登录才能操作的接口的时候,后台进行判断给你一个token 参数失效的回调

3.作为一个合理的项目框架,总该有一个afn的封装吧!在封装的afn里面进行统一判断,如下图。(因为每个后台处理方式不一样,代码就上图吧,给你们代码也复用不了。)

提高iOS开发效率的小技巧与思路

4.这个通知发送到了uitabbarcontroller,进行让用户重新登录处理

?
1
2
3
4
5
#import <uikit/uikit.h>
 
@interface wxmaincontroller : uitabbarcontroller
 
@end
?
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
#pragma mark -监听账号互踢,这时候先退出登录,然后回到首页
- (void)addnotification{
 
  ws(weakself);
 
  //  [[nsnotificationcenter defaultcenter] postnotificationname:kmutualkicknotification object:nil];
  [[nsnotificationcenter defaultcenter] addobserverforname:kmutualkicknotification object:nil queue:nil usingblock:^(nsnotification * _nonnull note) {
 
    [weakself alertwindow];
 
  }];
 
}
 
#pragma mark-弹出框选择界面
- (void)alertwindow{
 
 
  if (!self.isshow) {
 
    self.isshow = yes;
 
    uialertview *alter = [[uialertview alloc] initwithtitle:@"" message:@"您的账号已在其他设备登录,现在您已经处于退出登录状态" delegate:self cancelbuttontitle:@"确定" otherbuttontitles:nil];
 
    [alter show];
  }
 
 
}
 
#pragma mark-弹出框选择界面的代理方法,点击确定就弹出登录框
- (void)alertview:(uialertview *)alertview clickedbuttonatindex:(nsinteger)buttonindex{
 
  if (buttonindex == 0) {
 
    wxlogincontroller * logincontroller = [wxlogincontroller showlogincontoller:no andisshowcolse:no];
 
    [self presentviewcontroller:logincontroller animated:yes completion:nil];
 
    self.isshow = no;
 
  }
 
}

任何事情都有方法和技巧,单没有捷径,ios开发也不例外,脚踏实地从实践中发现方法,熟练后就有技巧。希望本文能够帮助的学习ios开发的大家。

延伸 · 阅读

精彩推荐
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03