- 博客(44)
- 收藏
- 关注
原创 30. UIScrollView内部子控件添加约束的注意点
30. UIScrollView内部子控件添加约束的注意点:子控件的尺寸不能通过UIScrollView来计算,可以考虑通过以下方式计算 可以设置固定值(width==100,height==300)可以相对于UIScrollView以外的其他控件来计算尺寸UIScrollView的frame应该通过子控件以外的其他控件来计算UIScrollView的contentSize通过子控件来计算
2017-01-03 19:29:17
291
原创 23.Quartz2D总结
一.Quartz2D简介Quartz2D是二维的绘图引擎(经包装的函数库,方便开发者使用。也就是说苹果帮我们封装了一套绘图的函数库),用Quartz2D写的同一份代码,既可以运行在iphone上又可以运行在mac上,可以跨平台开发,开发中比较常用的是截屏/裁剪/自定义UI控件,Quartz2D在iOS开发中的价值就是自定义UI控件.二.绘图简介1.绘图的步骤: 1.获取上下文
2016-08-16 16:18:29
399
原创 29.获取文件缓存大小
第一种方法NSFileManager *manger = [NSFileManager defaultManager];NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];NSString *cachePath = [caches
2016-04-10 15:35:12
316
原创 28.如何监听键盘最右下角按钮的点击
1.通过代理/** * 监听键盘最右下角按钮的点击(return key,比如换行,完成等) */- (BOOL)textFieldShouldReturn:(UITextField *)textField { if (textField.hasText) { //do something } return YES;}2.重写 insertText 方法 也
2016-04-09 22:14:19
634
原创 27.UIMenuController的介绍
UIMenuController的示例UIMenuController须知默认情况下, 有以下控件已经支持UIMenuController UITextFieldUITextViewUIWebView-让其他控件也支持UIMenuController(比如UILabel)自定义UILabel- (void)setup{self.userInteractionEnabled = Y
2016-03-30 13:32:28
212
原创 26.AFNetworking的使用
get/post请求处理一.第一种方法// AFHTTPRequestOperationManager内部包装了NSURLConnectionAFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; NSDictionary *params = @{@"username" : @"aaa"};[mg
2016-03-24 15:37:47
232
原创 25.NSURLSession的使用
get请求1.第一种方法// 获得NSURLSession对象NSURLSession *session = [NSURLSession sharedSession];// 创建任务NSURLSessionDataTask *task = [session dataTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWit
2016-03-24 15:16:41
224
原创 24.NSURLConnection与RunLoop
NSURLConnection *conn = [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"qq"]] delegate:self];默认会开启一个子线程请求数据如果把请求放在 `dispatch_async` 中代理无返回数据 dispatch_asy
2016-03-20 11:45:09
239
原创 23.获取文件的MIMEType
第一种- (NSString *)MIMEType{if (![[NSFileManager defaultManager] fileExistsAtPath:self]) { return nil;}CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (_
2016-03-20 10:02:51
345
原创 22.文件解压缩
使用第三方库 SSZipArchive 方法[SSZipArchive createZipFileAtPath:<#(NSString *)#> withFilesAtPaths:<#(NSArray *)#>];[SSZipArchive createZipFileAtPath:<#(NSString *)#> withContentsOfDirectory:<#(NSString *)#>
2016-03-19 10:47:24
251
原创 21.文件下载
小文件下载如果文件比较小,下载方式会比较多直接用 NSData 的 dataWithContentsOfURL 方法NSURL *url = [NSURL URLWithString:@"sss"];NSData *data = [NSData dataWithContentsOfURL:url];利用 NSURLConnection 发送一个HTTP请求//方法一: NSURL *url
2016-03-19 10:15:40
255
原创 20.网络
网络HTTP请求GET请求NSString *urlStr = @"http://xxxxx.com";urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];NSURL *url = [NSURL URLWithString:urlStr];// 请求NSURLRequest *r
2016-03-19 09:35:44
267
原创 19.如何修改UITextField的placeholder颜色
修改UITextField的placeholder颜色方法一://使用属性@property(nonatomic,copy) NSAttributedString *attributedPlaceholder; // 文字属性 NSMutableDictionary *attrs = [NSMutableDictionary dictionary];attrs[NSForegroundC
2016-03-03 21:37:16
293
原创 18.ios中的多线程
iOS中多线程的实现方案1. NSThread一个NSThread对象就代表一条线程NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];[thread start];// 线程一启动,就会在线程thread中执行self的run方法主线程相关用法+ (NSTh
2016-03-03 21:25:58
205
原创 17.指针与数组
指针p的加减法运算指针p + N p里面存储的地址值 + N * 指针所指向类型的占用字节数指针p - N p里面存储的地址值 - N * 指针所指向类型的占用字节数数组名存储的是数组首元素的地址等价于:一个指向数组首元素的指针数组名 + 1 的跨度:数组首元素的占用字节数其他结论&num + 1的跨度:num的占用字节数
2016-02-22 19:28:03
252
原创 16.copy与mutableCopy
实现拷贝的方法copy 只会产生不可变的副本对象(比如NSString)mutableCopy 只会产生可变的副本对象(比如NSMutableString) 自定义对象的拷贝
2016-02-19 21:04:42
218
原创 15.static的作用
static的作用:1.修饰局部变量让局部变量只初始化一次局部变量在程序中只有一份内存并不会改变局部变量的作用域,仅仅是改变了局部变量的生命周期(只到程序结束,这个局部变量才会销毁) //当a不用static修饰时- (void) test {int a = 0;a ++;NSLog(@"a====%d",a);}[self test]; // a === 1//当a用stat
2016-02-18 21:07:52
261
原创 13.控制器的父子关系
1.控制器父子关系的建立原则1.1 如果2个控制器的view是父子关系(不管是直接还是间接的父子关系),那么这2个控制器也应该为父子关系[a.view addSubview:b.view];[a addChildViewController:b];// 或者[a.view addSubview:otherView];[otherView addSubbiew.b.view];[a ad
2016-02-17 20:59:40
296
原创 14.RunLoop的理解
什么是RunLoop从字面意思看:运行循环,跑圈其实它内部就是do-while 循环,在这个循环内部不断地处理各种任务(比如Source,Timer,Observer)一个线程对应一个RunLoop,主线程的RunLoop默认已经启动,子线程的RunLoop得手动启动(调用run方法)RunLoop只能选择一个Model启动,如果当前Model中没有任何Source,Timer,Observ
2016-02-16 21:41:47
506
原创 12.代理、通知、KVC\KVO
代理代理设计模式的作用: 1.A对象监听B对象的一些行为,A成为B的代理2.B对象想告诉A对象一些事情,A成为B的代理代理设计模式的总结 如果你想监听别人的一些行为,那么你就要成为别人的代理如果你想告诉别人一些事情,那么就让别人成为你的代理代理设计模式的开发步骤 1.拟一份协议(协议名字的格式:控件名 + Delegate),在协议里面声明一些代理方法(一般代理方法都是@option
2016-02-14 17:39:16
270
原创 11.UIView的transform属性
transform:形变属性,能完成的功能:平移、缩放、旋转平移self.tempView.transform = CGAffineTransformMakeTranslation(-100, 100);缩放self.tempView.transform = CGAffineTransformMakeScale(0.5, 0.5);旋转self.tempView.transform = CG
2016-02-14 14:43:19
222
原创 10.UITableView的刷新数据方法
数据刷新方法重新刷新屏幕上的所有cell[self.tableView reloadData];刷新特定行的cell[self.tableView reloadRowsAtIndexPaths:@[ [NSIndexPath indexPathForRow:0 inSection:0],[NSIndexPath indexPathForRow:1 inSection:0]]
2016-02-13 15:36:24
546
原创 9.UITableView的设置
tableView性能优化 - cell的循环利用方法1/** * 什么时候调用:每当有一个cell进入视野范围内就会调用 */ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ // 0.重用标识 // 被stati
2016-02-13 13:55:43
349
原创 8.Masonry的使用方法
Masonry使用步骤添加Masonry文件夹的所有源代码到项目中添加2个宏、导入主头文件 只要添加了这个宏'#define MAS_SHORTHAND',就不用带mas_前缀只要添加了这个宏 '#define MAS_SHORTHAND_GLOBALS',equalTo就等价于mas_equalTo这个头文件一定要放在上面两个宏的后面import "Masonry.h"添加约束的方法/
2016-02-11 13:01:49
346
原创 7.屏幕适配
1. 屏幕适配的发展历史iPhone3GS/iPhone4 没有屏幕适配可言全部用frame,bounds,center进行布局很多这样的现象:坐标值,宽度高度值全部写死UIButton *btn = [[UIButton alloc]init];btn.frame = CGRectMake(0,0,320 - 20,480 - 30);iPad出现,iPhone横屏出现Autores
2016-02-11 11:01:01
281
原创 6.UIScrollView与UIPageControl的认识
UIScrollView的属性@property(nonatomic) CGPoint contentOffset; 这个属性用来表示UIScrollView滚动的位置(其实就是内容左上角与scrollView左上角的间距值)@property(nonatomic) CGSize contentSize; 这个属性用来表示UIScrollView内容的尺寸,滚动范围(能滚多远)@pro
2016-02-10 11:44:38
375
原创 5.Xib和storyboard对比
共同点:都用来描述软件界面都用Interface Builder工具来编辑本质都是转换成代码去创建控件不同点:Xib是轻量级的,用来描述局部的UI界面Storyboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系Xib的加载方法1 NSArray *views = [[NSBundle mainBundle] loadNibNamed:@”xib文件名
2016-02-09 12:11:25
292
原创 4.模型与字典的对比
模型什么是模型? 专门用来存放数据的对象一般都是一些直接继承自NSObject的纯对象内部会提供一些属性来存放数据用模型取代字典的好处使用字典的坏处一般情况下,设置数据和取出数据都使用“字符串类型的key”,编写这些key时,编辑器没有智能提示,需要手敲 dict[@”name”] = @”Jack”; NSString *name = dict[@”name”];手敲字符串key
2016-02-09 12:01:32
448
原创 3.定时任务处理
定时任务方法1:performSelector// 1.5s后自动调用self的hideHUD方法[self performSelector:@selector(hideHUD) withObject:nil afterDelay:1.5];方法2:GCDdispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC
2016-02-09 11:13:05
263
原创 2.UIView的认识
UIView的常见属性NSArray *subviews 所有的子控件数组元素的顺序决定着子控件的显示层级顺序(下标越大的,越显示在上面)UIView的常见方法addSubview: 添加一个子控件使用这个方法添加的子控件会被塞到subviews数组的最后面可以使用下面的方法调整子控件在subview数组中的顺序// 将子控件view插入到subviews数组的index位置-
2016-02-09 11:02:39
240
原创 1.UI
storyboard文件的认识用来描述软件界面默认情况下,程序一启动就会加载Main.storyboard加载storyboard时,会首先创建和显示箭头所指的控制器界面IBAction和IBOutletIBAction:本质就是void能让方法具备连线的功能IBOutlet能让属性具备连线的功能storyboard连线容易出现的问题连接的方法代码被删掉,但是连线没有去掉可能会出现
2016-02-09 10:56:00
314
原创 ios9中设置状态栏颜色与隐藏
1.ios中设置状态栏的样式由 最顶层的UIWindow所在的控制器控制处理。2.ios9之前可以不用设置window的根控制器,ios9必须设置根控制器。3.ios9后设置状态栏的样式(隐藏)时,在最顶层的UIWindow所在的控制器中通过下面两个方法处理 - (UIStatusBarStyle)preferredStatusBarStyle { //设置样式
2016-02-01 15:52:59
4044
原创 ios9新特性分析
1.属性nonnull \__nonnull 修饰时:该属性的setter和 getter都不能为nil例如:@property (nonatomic,strong, nonnull)NSArray *names;@property (nonatomic,strong) NSArray * __nonnull names;设置属性names值时,如果为n
2016-01-31 21:46:09
357
原创 自定义UIPageControl圆点背景图片
// 显示页码的UIPageControlUIPageControl *pageControl = [[UIPageControlalloc] init];[pageControl setValue:[UIImageimageWithName:@"compose_keyboard_dot_selected"]forKeyPath:@"_currentPageImag
2016-01-28 16:39:33
803
原创 OC中的正则匹配
一.OC中原生的正则匹配//匹配QQ号- (void)checkQQ { // QQ : 5 ~ 12,全部都是数字 NSString *str = @"8882341"; // 1.产生一个正则表达式对象 NSRegularExpression *regex = [NSRegularExpressionreg
2016-01-27 20:49:08
734
原创 对 removeObject 的理解
数组调用 removeObject 时底层会调用 - (BOOL)isEqual:(id)object 方法遍历数组中的对象,根据传入的 object 对象的指针,判断当前要比较的对象的指针是否和object的指针一样,如果一样则就是要删出的对象,如果不一样则继续遍历。如遇到不想根据对象的指针判断两个对象相等,如果只根据对象的某个属性判断两个对象是否相等,则比较对象
2016-01-27 16:09:23
981
原创 UIImageView的两种创建方式的比较
1.UIImageView *imgView = [[UIImageViewalloc] init]; imgView.frame =CGRectMake(0,0, 30,30);2.UIImage *imgView = [UIImageimageWithName:@"timeline_image_gif"]; // 这种情况下
2016-01-24 12:28:30
255
原创 iOS中类似九宫格排版数据
如果知道 1.数据总个数 2.每行(每页)最多显示的个数 就能算出数据一共能显示多少行(页)例子:一行(页)最多几个方法一: int maxCols = 3;总行(页)数: int totalRows = 0; if(count % maxCols == 0) { totalRows = count /maxCols;
2016-01-14 22:07:43
392
原创 ios中处理时间是否是今天,昨天,今年
1.创建NSDate的分类#import "NSDate+MJ.h"/** * 是否为今天 */- (BOOL)isToday{ NSCalendar *calendar = [NSCalendarcurrentCalendar]; int unit =NSCalendarUnitDay | NSCalendar
2016-01-14 21:00:06
544
原创 给UIView添加背景图片的方法
1. self.backgroundColor = [UIColorcolorWithPatternImage:[UIImage imageNamed:@"timeline_retweet_background"]]; 直接平铺一张图片2.调用- (void)drawRect:(CGRect)rect { [[UIImageimageNamed:@"
2016-01-13 20:52:05
294
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人