美文网首页iOS Developer
iOS 开发之小知识点汇总

iOS 开发之小知识点汇总

作者: 一个很帅的蓝孩子 | 来源:发表于2016-11-18 11:24 被阅读0次
    把iOS开发中常用的或者重要的东西记录下来,用来复习和巩固。

    1、一般自定义导航栏,统一设置导航栏颜色

    self.navigationBar.barTintColor = [UIColor orangeColor];
    [UINavigationBar appearance].barTintColor = [UIColor redColor];
    

    2、控件设置背景图片,一些控件没有setBackgroundImage方法的可以用这个设置背景图片

    [self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"1.png"]]];
    

    3、调用系统应用

    打电话: [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"tel://400-800-082"]];
    浏览器: [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"http://www.baidu.com"]];
    Email: [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"mailto://"]];
    系统设置: [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"prefs:root=WIFI"]];
    

    4、隐藏UINavigationBar

    在viewWillAppear:[self.navigationController setNavigationBarHidden:YES animated:YES];
    在 viewWillDisappear: [self.navigationController setNavigationBarHidden:NO animated:YES];
    

    5、设置震动和声音

    导入:AudioToolbox.framework框架
    在需要用到的地方导入 #import <AudioToolbox/AudioToolbox.h>
    
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);//震动
    AudioServicesPlaySystemSound(1000);//新邮件提示音
    

    6、删除所有子控件

    [self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    

    7、加载plist文件

    NSString *path = [[NSBundle mainBundle]pathForResource:@"images" ofType:@"plist"];    //如果plist根数据为数组    NSArray *arr = [NSArray arrayWithContentsOfFile:path];    //如果plist根数据为字典    NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:path];
    

    8、计算文件和文件夹大小

    - (float)fileSizeAtPath:(NSString *)Path{    
    //文件管理者    
    NSFileManager *mgr = [NSFileManager defaultManager];   
     //判断字符串是否为文件/文件夹    
    BOOL dir = NO;   
     BOOL exists = [mgr fileExistsAtPath:Path isDirectory:&dir];    
    //文件/文件夹不存在    
    if (exists == NO) return 0;   
     //path是文件夹    
    if (dir){        
    //遍历文件夹中的所有内容       
     NSArray *subpaths = [mgr subpathsAtPath:Path];       
     //计算文件夹大小        
    float totalByteSize = 0;        
    for (NSString *subpath in subpaths){            
    //拼接全路径           
     NSString *fullSubPath = [Path stringByAppendingPathComponent:subpath];            
    //判断是否为文件            
    BOOL dir = NO;            
    [mgr fileExistsAtPath:fullSubPath isDirectory:&dir];            
    if (dir == NO){//是文件                
    NSDictionary *attr = [mgr attributesOfItemAtPath:fullSubPath error:nil];                
    totalByteSize += [attr[NSFileSize] floatValue];           
     }        
    }        
    return totalByteSize/(1024.0*1024.0);    
    } else{//是文件        
    NSDictionary *attr = [mgr attributesOfItemAtPath:Path error:nil];       
     return [attr[NSFileSize] floatValue]/(1024.0*1024.0);    
    }
    }
    

    9、app提交审核上架关于IDFA广告标识符——IDFA(identifier for advertising)

    app提交审核最后一步:此app是否含有广告标识符IDFA?后面有两个选项:是、否?
    怎么选择或者看自己项目中是否采集了IDFA呢?可以在项目中General下拉到framework,看有没有一个AdSupport.framework的framework,有的话就选择是,没有就选择否。

    10.各种图形的绘制

    图形的绘制是在UIView的-(void)drawRect:(CGRect)rect方法中,一般drawRect方法是在什么时候调用呢:

    1. 是在controller的loadView ——>ViewDidLoad——>之后调用的。(没有设置rect大小不被调用)
      2.调用了sizeTofit方法之后。 如果调用sizeTofit方法计算出size,sizeTofit方法就会自动调用- (CGSize)sizeThatFits:(CGSize)size这个方法,因为要计算出size,所以这个时候drawRect就会被调用。
    46B83D18-8D5C-4A1B-A851-EA4110F3C01D.png

    3.通过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame的时候自动调用drawRect:。大致意思和2差不多,这里是Redraw,就是说需要用到rect的时候就会调用drawRect!(自己的理解,这样理解应该没错吧 )

    A4CE27B5-C33E-4DAF-AE71-FF6E38F607F2.png

    4.直接调用setNeedsDisplay,或者setNeedsDisplayInRect:触发drawRect:,但是有个前提条件是rect不能为0。setNeedsDisplay刷新显示肯定是会调用drawRect,然后setNeedsDisplayInRect这个方法是需要传入rect的,所以这两个方法也是调用drawRect的。

    6591D553-D4B7-48FC-8A1F-2001BF0FE6C7.png

    绘制:

     CGContextRef context = UIGraphicsGetCurrentContext();
        
        //1.画一条线
        //线条颜色
        CGContextSetRGBStrokeColor(context, arc4random()%256/255.0, arc4random()%256/255.0, arc4random()%256/255.0, 1);
        //线条的起始位置
        CGContextMoveToPoint(context, 20, 20);
        //线条的结束位置
        CGContextAddLineToPoint(context, 200, 20);
        //绘制路径
        CGContextStrokePath(context);
    
        
        //2.写文字
        //线条宽度
        CGContextSetLineWidth(context, 1.0);
        //颜色
        CGContextSetRGBFillColor(context, 0.5, 0.5, 0.5, 1.0);
        UIFont *font = [UIFont boldSystemFontOfSize:18.0];
        NSString *string = @"姓名:a pretty boy \n 年龄 : 18 \n 性别 : boy";
        [string drawInRect:CGRectMake(20, 40, 200, 90) withAttributes:@{NSFontAttributeName:font}];
        
        
        //3.画一个正方形图形 (无边框)
        //正方形填充颜色
        CGContextSetRGBFillColor(context, 0.5, 0.5, 0.5, 1.0);
        CGContextFillRect(context, CGRectMake(20, 150, 100, 100));
        CGContextStrokePath(context);
        
        //4.正方形有边框
        //正方形边框颜色
        CGContextSetRGBStrokeColor(context, 0.5, 0.5, 0.5, 1.0);
        //边框宽度
        CGContextSetLineWidth(context, 2.0);
        CGContextAddRect(context, CGRectMake(150, 150, 100, 100));
        CGContextStrokePath(context);
        
        //5.椭圆
        CGRect arect = CGRectMake(20, 260, 150, 100);
        CGContextSetRGBStrokeColor(context, 0.6, 0.9, 0, 1.0);
        CGContextSetLineWidth(context, 2);
        CGContextAddEllipseInRect(context, arect);
        CGContextDrawPath(context, kCGPathStroke);
        
        //6.绘制图片
        NSString* imagePath = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"png"];
        UIImage * myImageObj = [[UIImage alloc] initWithContentsOfFile:imagePath];
        
        [myImageObj drawInRect:CGRectMake(20, 370, 200, 200)];
        NSString *s = @"我的小狗";
        [s drawAtPoint:CGPointMake(60, 400) withAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16]}];
        ```
    
    CDC33464-F977-493B-AD3D-1BB9AA1B1651.png
     更多绘制看这里:http://blog.csdn.net/zhibudefeng/article/details/8463268/
    
    ##11.layoutSubviews在以下情况下会被调用:这个方法,默认没有做任何事情,需要子类进行重写
     
    >1、addSubview会触发layoutSubviews。
    >2、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化。
    >3、滚动一个UIScrollView会触发layoutSubviews。
    >4、旋转Screen会触发父UIView上的layoutSubviews事件。
    >5、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。
    >6、直接调用setLayoutSubviews。
    
    setNeedsLayout方法:
    标记为需要重新布局,不立即刷新,但layoutSubviews一定会被调用,配合layoutIfNeeded立即更新。setNeedDisplay在receiver标上一个需要被重新绘图的标记,在下一个draw周期自动重绘,iphone device的刷新频率是60HZ,也就是1/60秒后重绘。 如果要立即刷新,要先调用[view setNeedsLayout],把标记设为需要布局,然后马上调用[view layoutIfNeeded],实现布局
    
    -layoutIfNeeded方法:
    如果有需要刷新的标记,立即调用layoutSubviews进行布局(如果没有标记,不会调用layoutSubviews),在layoutSubviews的注释里有这么一句:called by layoutIfNeeded automatically 自动调用layoutIfNeeded方法。
    
    
    • (void)layoutSubviews; // override point. called by layoutIfNeeded automatically. As of iOS 6.0, when constraints-based layout is used the base implementation applies the constraints-based layout, otherwise it does nothing.
    ##12、使用cocoapods导致的 library not found for -lAFNetworking 等的问题
    
    之前的项目在cocoapods升级之后报错了
    

    library not found for -lAFNetworkingclang: error: linker command failed with exit code 1 (use -v to see invocation)

    之前我在网上搜到的解决方法就是将Other Linker Flags 改为all_load就可以了。
    
    关于Other Linker Flags里面添加的参数-ObjC、-all_load和-force_load讲解:http://www.jianshu.com/p/7579eda7cbef
    
    刚刚看到了第二种解决方案:在 Search Paths 中 Library Search Paths 添加
    

    "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking"

    ##13、修改button字体靠左:
    
    我们平时使用label什么的让字体居左居右都是用的textAlignment ,但是给button设置btn.titleLabel.textAlignment = NSTextAlignmentLeft;是不起作用的,它只是让标签中的文本左对齐,并没有改变标签在按钮中的对齐方式。所以,我们要用
    

    btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

    这行代码让按钮中的标签左对齐,当然还有(center、right、fill),但是这样又会使button紧靠左边不好看,为了美观,我们需要添加下面这行代码:
    

    btn.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);

    这样就比较美观了。
    
    ##14、设置GIF动态图
    
    设置GIF动图
    
    导入#import <SDWebImage/UIImage+GIF.h>
    
    

    NSString *path = [[NSBundle mainBundle]pathForResource:@"v_news" ofType:@"gif"];
    NSData *data = [NSData dataWithContentsOfFile:path];
    UIImage image = [UIImage sd_animatedGIFWithData:data];
    UIImageView gifview=[[UIImageView alloc]initWithFrame:CGRectMake(10,20,image.size.width2, image.size.height
    2)];
    gifview.image=image;
    [self addSubview:gifview];

    ##15、点9图 
    
    
    ![123.png](https://img.haomeiwen.com/i2900479/c9d877ec4ca44cfb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    如果项目中要用到横向的长条状图片,而美工又不能给你做图,恰好手上有如上一张图,那就只能将就着用了,但是如果直接用图片就会变形很丑。如下:
    
    
    ![6289F45F-9579-4EF6-BC55-B8BED30BDAB5.png](https://img.haomeiwen.com/i2900479/9b468dcdcb7048a8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    所以就用到了点9图,UIEdgeInsetsMake里面分别是上、左、下、右
    

    UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(20, 100, 150, 50)];
    UIImage *image = [UIImage imageNamed:@"123.png"];
    image = [image resizableImageWithCapInsets:UIEdgeInsetsMake((image.size.height-1)/2, (image.size.width-1)/2, (image.size.height-1)/2, (image.size.width-1)/2) resizingMode:UIImageResizingModeStretch];
    [btn setBackgroundImage:image forState:UIControlStateNormal];
    [self.view addSubview:btn];

    最终效果如下:
    
    ![8A325262-A2A7-4C3E-B8DC-01A43752745E.png](https://img.haomeiwen.com/i2900479/f5153676a1be33b0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    
    这里就把平时的一些小知识点全记录在这里了,持续更新!!!

    相关文章

      网友评论

        本文标题:iOS 开发之小知识点汇总

        本文链接:https://www.haomeiwen.com/subject/ulijpttx.html