iOS:小技巧

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

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: ;

时间: 2024-09-30 14:46:40

iOS:小技巧的相关文章

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

iOS 小技巧总结,绝对有你想要的 原文链接:http://www.jianshu.com/p/4523eafb4cd4 在这里总结一些 iOS 开发中的小技巧,能大大方便我们的开发,持续更新. —— 由 xcvxvxc分享 在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 在viewWillAppear里面添加如下代码: //分组列表头部空白处理 CGRect frame = myTableView.tableHeade

iOS小技巧--用runtime 解决UIButton 重复点击问题

iOS小技巧–用runtime 解决UIButton 重复点击问题 什么是这个问题 我们的按钮是点击一次响应一次, 即使频繁的点击也不会出问题, 可是某些场景下还偏偏就是会出问题. 通常是如何解决 我们通常会在按钮点击的时候设置这个按钮不可点击. 等待0.xS的延时后,在设置回来; 或者在操作结束的时候设置可以点击. - (IBAction)clickBtn1:(UIbutton *)sender { sender.enabled = NO; doSomething sender.enabled

ios小技巧

ios开发小技巧(转) 1.通过下面方式可以获取图片的像素颜色点:- (void*)getImageData:(UIImage*)image{    void* imageData;    if (imageData == NULL)         imageData = malloc(4 * image.size.width * image.size.height);        CGColorSpaceRef cref = CGColorSpaceCreateDeviceRGB();  

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

原文链接 在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0.1)]; self.tableView.tableHeaderView = view; UITableView的plain样式下,取消区头停滞效果 - (void)scrollViewDidScroll:(

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

http://www.cocoachina.com/ios/20150911/13260.html 作者:uxyheaven 授权本站转载. 什么是这个问题 我们的按钮是点击一次响应一次, 即使频繁的点击也不会出问题, 可是某些场景下还偏偏就是会出问题. 通常是如何解决 我们通常会在按钮点击的时候设置这个按钮不可点击. 等待0.xS的延时后,在设置回来; 或者在操作结束的时候设置可以点击. 1 2 3 4 5 6 - (IBAction)clickBtn1:(UIbutton *)sender

&lt;iOS小技巧&gt; 昵称格式判断

一.使用方式 + 如下代码块功能:判断字体,判断字体输入格式 NSString *firstStr = [name substringToIndex:1];    NSArray *num = @[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9"];    i

IOS小技巧整理

1 随机数的使用  头文件的引用         #import <time.h>        #import <mach/mach_time.h> srandom()的使用         srandom((unsigned)(mach_absolute_time() & 0xFFFFFFFF)); 直接使用 random() 来调用随机数 2 在UIImageView 中旋转图像  float rotateAngle = M_PI;        CGAffineTr

你想要的iOS 小技巧总结

UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0.1)]; self.tableView.tableHeaderView = view; UITableView的plain样式下,取消区头停滞效果 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat sect

iOS小技巧2

这段代码是实现了类似QQ空间"我的空间"里面的圆形头像 //圆形的头像 UIImageView * headImage = [[UIImageView alloc]initWithFrame:CGRectMake(100, 300, 120, 120)]; headImage.backgroundColor = [UIColor grayColor]; headImage.image = [UIImage imageNamed:@"headimage.jpg"];

iOS小技巧---swift 判断IOS版本及适配

operatingSystemVersion 为了更复杂的版本比较,operatingSystemVersion能够被直接检查.将它和Swift模式比较和switch语句组合,可以使得代码更简洁. let os = NSProcessInfo().operatingSystemVersion switch  (os.majorVersion, os.minorVersion, os.patchVersion) { case  (8, _, _):      println( "iOS >=