记录下一些不常用技巧,以防忘记,复制用。

1、获取当前的View在Window的frame:

1
2
UIWindow * window=[[[UIApplication sharedApplication] delegate] window];  
CGRect rect=[_myButton convertRect:_myButton.bounds toView:window];

2、UIImageView 和UILabel 等一些控件,需要加这句才能setCorn

1
_myLabel.layer.masksToBounds = YES;

3、手机上的沙盒路径要加"Documents",不然存储写入失败!mac上不用!

1
2
3
[_myArray writeToFile:[[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]  stringByAppendingPathComponent:@"shopCategory.plist"] atomically:YES];
  
NSArray *tempAllData = [NSArray arrayWithContentsOfFile:[[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]  stringByAppendingPathComponent:@"shopCategory.plist"]];

后续补充:

    Document:一般需要持久的数据都放在此目录中,可以在当中添加子文件夹,iTunes备份和恢复的时候,会包括此目录。

    Library:设置程序的默认设置和其他状态信息

    temp:创建临时文件的目录,当iOS设备重启时,文件会被自动清除

4、图片拉伸不失真,如聊天软件对话气泡

1)、方法1,比较老的,

1
2
UIImage *tempImage2 = [UIImage imageNamed:@"sub.png"];
tempImage2 = [tempImage2 stretchableImageWithLeftCapWidth:tempImage2.size.width/2 topCapHeight:0];

2)、方法2,比较新的

1
2
3
4
5
6
7
8
UIImage *tempImage3 = [UIImage imageNamed:@"sub"];
 
CGFloat tempH = tempImage3.size.height/2;
CGFloat tempW = tempImage3.size.width/2;
     
UIEdgeInsets tempEdg = UIEdgeInsetsMake(tempH, tempW, tempH, tempW);
     
tempImage3 = [tempImage3 resizableImageWithCapInsets:tempEdg resizingMode:UIImageResizingModeStretch];

5、视频截取缩略图,其中CMTimeMakeWithSeconds(5,1),调整截图帧数/秒数,一般不用特意去修改,不做参数传入,除非片头一段时间都一样的视频。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#import <AVFoundation/AVFoundation.h>
 
-(UIImage *)getThumbnailImage:(NSString *)videoURL
{
    AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:videoURL] options:nil];
     
    AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset];
     
    gen.appliesPreferredTrackTransform = YES;
    //控制截取时间
    CMTime time = CMTimeMakeWithSeconds(5, 1);
     
    NSError *error = nil;
     
    CMTime actualTime;
     
    CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error];
     
    UIImage *thumb = [[UIImage alloc] initWithCGImage:image];
     
    CGImageRelease(image);
     
    return thumb;
}

6、cell下划线左边顶住屏幕左边。

1
2
3
cell.preservesSuperviewLayoutMargins = NO;
cell.layoutMargins = UIEdgeInsetsZero;
cell.separatorInset = UIEdgeInsetsZero;

7、去除xcode8冗余信息,虽然已经记住了。

OS_ACTIVITY_MODE    disable

8、播放音频

1)工程内音频

1-1)、获取音频路径

1
2
3
NSString *path = [[NSBundle mainBundle] pathForResource:@"shakebell" ofType:@"wav"];
     
NSURL *url = [NSURL fileURLWithPath:path];

1-2)、创建音频播放ID

1
2
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url), &soundID);

1-3)、Play

1
AudioServicesPlaySystemSound(soundID);

2)系统音频,参数为1000-1351,具体查表,如1007为“sms-received1”

1
AudioServicesPlaySystemSound(1007);

9、字体自适应

1)、固定的Frame,自适应Font大小,如数量增减,1和1000。

1
[label1 setAdjustsFontSizeToFitWidth:YES];

2)、固定的Font,自适应Frame,用于信息类显示

1
[label2 sizeToFit]; 

3)、固定的Font,获取自适应Frame值,反过来设置Label的Frame,用于信息类显示。这里的100是等下设置Label的width,也是返回的rect.frame.size.width

1
CGRect rect = [templabel.text boundingRectWithSize:CGSizeMake(100, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:templabel.font} context:nil];

10、AFNetworking 检测网络连接状态

1
2
3
4
5
[[AFNetworkReachabilityManager sharedManager]startMonitoring];
 
[[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        NSLog(@"%ld",status);
    }];

11、编辑相关

1)键盘事件通知

1-1)、弹出键盘可能盖住TextField。监听键盘的通知

1
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(moveView:) name:UIKeyboardDidChangeFrameNotification object:nil];

1-2)、moveView方法里接收通知,tempTime是键盘动画时间,tempY是键盘当前的y轴位置。(接着要移动评论框或者移动后面的ScrollView都可以)

1
2
3
4
5
6
7
8
9
10
11
CGFloat tempTime = [[noti.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
CGFloat tempY = [[noti.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue].origin.y
 
//重置约束条件
//self.theBottomSpace.constant = ?;
 
[UIView animateWithDuration:duration animations:^{
        //更新约束
        [self.view layoutIfNeeded];
 
    }];

2)dealloc记得移除

1
[[NSNotificationCenter defaultCenter]removeObserver:self];

3)touchesBegan:withEvent && scrollViewDidScroll -->屏幕点击&&屏幕滑动要取消编辑状态

1
[self.view endEditing:YES];

12、上传图片(头像)

1-1)、把Image打成NSData

1
NSData *imagedata = UIImageJPEGRepresentation(tempImage, 1.0);

1-2)、AFNetworking的POST方法填如下。formData:POST方法里的Block参数,name:跟服务器有关,filename:随意填,mimeType:就image/jpg。

1
[formData appendPartWithFileData:imagedata name:@"imgFile" fileName:@"idontcare.jpg" mimeType:@"image/jpg"];

13、强制布局

1
[self.view layoutIfNeeded];

14、图片双击缩放

1)scrollView才可以缩放,所以要把ImageView加在scrollView,给scrollView(这里的 self )添加手势识别。要设最大/小缩放比例!

1
2
3
4
5
UITapGestureRecognizer *imageTwoTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(twoTapAction:)];
 
imageTwoTap.numberOfTapsRequired = 2;
 
[self addGestureRecognizer: imageTwoTap];

2)第一次点哪放大哪,第二次恢复原来大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define SCALE_WIDTH  60         //要放大的局部宽度大小
#define SCALE_HEIGHT 60         //要放大的局部高度大小
 
-(void)twoTapAction:(UITapGestureRecognizer *)tempTap
{
    if (self.zoomScale != 1.0)
    {
        [self setZoomScale:1.0 animated:YES];
    }
    else
    {
        CGPoint tempPoint = [tempTap locationInView:self];
        [self zoomToRect:CGRectMake(tempPoint.x-SCALE_WIDTH/2, tempPoint.y-SCALE_HEIGHT/2, SCALE_WIDTH, SCALE_HEIGHT) animated:YES];
    }
}

15、加载XIB

1)、从多个cell样式的XIB加载。只有1个cell样式,可直接lastObject加载。(先根据不同的ID取,取不到再加载。)

1-1)、获取XIB里的所有对象

1
NSArray *cellArry = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([MyTableCell class]) owner:self options:nil];

1-2)、读取对应的Cell样式,此时的参数type为枚举,或基本数据类型。

1
cell = [cellArry objectAtIndex:type];

2)、在 UIView + xxx 的类别文件里,可以添加这个类。方便加载单种Cell样式的XIB。

1
2
3
4
+ (instancetype)viewFromXib
{
    return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil] lastObject];
}

16、常用延时执行

1)、dispatch_after

dispatch_after 代码块,一敲就出来,好像是Xcode8之后的。

2)、performSelector

-(void)performSelector: withObject: afterDelay: ;

iOS:小技巧(转)的更多相关文章

  1. iOS小技巧总结,绝对有你想要的

    原文链接 在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIV ...

  2. iOS小技巧 - 和屏幕等宽的Table分割线

    前言 因为本人也是学习iOS才一个多月,在写程序的过程中经常会遇到一些看似应该很简单,但是要解决好却要知道一点小trick的问题. 因此后面会陆续记一些这类问题,一来加深印象,二来也可以做个备忘录. ...

  3. iOS小技巧:用runtime 解决UIButton 重复点击问题

    http://www.cocoachina.com/ios/20150911/13260.html 作者:uxyheaven 授权本站转载. 什么是这个问题 我们的按钮是点击一次响应一次, 即使频繁的 ...

  4. iOS小技巧3

    将颜色合成图片 将颜色合成图片 +(UIImage *)imageWithColor:(UIColor *)color { CGRect rect = CGRectMake(0.0f, 0.0f, 1 ...

  5. iOS小技巧2

    这段代码是实现了类似QQ空间"我的空间"里面的圆形头像 //圆形的头像 UIImageView * headImage = [[UIImageView alloc]initWith ...

  6. 总有你需要的之 ios 小技巧 (下)

    图片上绘制文字 写一个UIImage的category NSMutableParagraphStyle* paragraphStyle = [[NSParagraphStyle defaultPara ...

  7. IOS小技巧——使用FMDB时如何把一个对像中的NSArray数组属性存到表中

    http://blog.csdn.net/github_29614995/article/details/46797917 在开发的当中,往往碰到要将数据持久化的时候用到FMDB,但是碰到模型中的属性 ...

  8. 你想要的iOS 小技巧总结

    UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIView alloc] initWithFrame:CGRectMake(, , ...

  9. IOS小技巧整理

    1 随机数的使用  头文件的引用         #import <time.h>        #import <mach/mach_time.h> srandom()的使用 ...

  10. <iOS小技巧> 昵称格式判断

    一.使用方式 + 如下代码块功能:判断字体,判断字体输入格式       NSString *firstStr = [name substringToIndex:1];    NSArray *num ...

随机推荐

  1. IIS 中文文件名下载会出现403访问被拒绝

    IIS 中文文件名下载会出现403访问被拒绝 服务器在安全加固后,出现了IIS 中文文件名下载会出现403访问被拒绝 换成英文的就好了

  2. SQL Server 数据库的维护(二)__触发器

    --维护数据库-- --触发器-- --概述: 触发器是一种特殊类型的存储过程,用来强制执行业务规则.在调用执上,触发器不能像存储过程那样可以由用户通过T-SQL语句直接调用,而是需要有数据库所发生的 ...

  3. 日志处理之logging模块

    日志级别: 'CRITICAL': CRITICAL, 'ERROR': ERROR, 'WARN': WARNING, 'WARNING': WARNING, 'INFO': INFO, 'DEBU ...

  4. 通过JDBC进行简单的增删改查(以MySQL为例)

    目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 ( ...

  5. 数据库热备份工具innobackupex的安装

    Xtrabackup是由percona开发的一个开源软件,此软件可以说是innodb热备工具ibbackup的一个开源替代品. 这个软件是由2个部分组成的:xtrabackup和innobackupe ...

  6. mysql 允许远程访问

    原来装mysql数据库的时候就想,这个只要在本地访问就可以了,没有必要让远程访问.可是,今天想把数据放到远程的机器上,却发现,不是简单的将sql语句(指导出的语句)执行一遍就行了,对于那些自增的字段, ...

  7. 更改XAMPP中MySQL数据库的端口号

    更改XAMPP中MySQL数据库的端口号 如果电脑上已安装MySql数据库,还想用XAMPP中自带的数据库就需要更改XAMPP中数据库的端口号,避免和已安装的数据库冲突.本例以更改为3307端口号为例 ...

  8. c++常见面试题

    1.class和struct的区别? 在c++中,在class中声明的成员默认为private成员,而在struct中声明的成员默认为public成员,class的默认继承方式为private,str ...

  9. ACM算法模板

    旧版模板下载链接: here 新版的模板目前不提供电子版,正在抽时间做一些修正以及添加一些新内容. 新模板如有需要纸质版的,可以自付打印费进行打印.购买链接:https://weidian.com/i ...

  10. 驱动开发学习笔记. 0.02 基于EASYARM-IMX283 烧写uboot和linux系统

    驱动开发读书笔记. 0.02 基于EASYARM-IMX283 怎么烧写自己裁剪的linux内核?(非所有arm9通用) 手上有一块tq2440,但是不知道什么原因,没有办法烧boot进norflas ...