自己总结的小知识点

不定时更新

解决图片的渲染效果

自己总结的小知识点_第1张图片
屏幕快照 2016-07-25 下午3.14.19.png

1.frame 和 bounds的重新认识

  • frame
    • 父试图内容 的左上角坐标为原点,计算出的 控件自己 矩形框 的位置和尺寸
  • bounds
    • 控件自己内容 的左上角坐标为原点,计算出的 控件自己 矩形框 的位置和尺寸
  • 概括
  • frame.size == bounds.size
  • frame.origin != bounds.origin (UIScrollView)
  • UIScrollView.bounds.origin == UIScrollView.contentOffset
自己总结的小知识点_第2张图片
bounds和frame的区别.png

2.矩形框和内容的理解

  • 矩形框

    • 控件自己的显示位置和尺寸
  • 内容

  • 控件内部的东西,比如他的子视图

3.UIScrollView 的重要属性

  • frame 只是你看到的大小
  • contentSize 实际内容的大小
  • contentInset 设置内容的边缘 逆时针
  • scrollIndicatorInsets 设置指示器的边缘
  • contentOffset 偏移量

UIScrollView 和导航控制器的配合使用

  • 为了让我们UIScrollView不被导航栏挡住 导航栏会默认给UIScrollView加一个内边距(64 = 20 + 44)下面的 tabBar 也是同理内边距(49)
  • 当有多个UIScrollView的时候,只会调节第一个添加UIScrollView,在第一个子控件不是UIScrollView的不会调节
  • 可以关闭UIScrollView的自动调整UIScrollView的内边距
  • 穿透效果就是用内边距来实现的(ios 7 之后)
  • 7 之后开始 tabView 的范围和内容是占据整个屏幕的 7之前则是从导航栏64的下边开始的 注意这里是内容移动了64 矩形框还是原来的大小

自定义内边距:

self.automaticallyAdjustsScrollViewInsets = NO;
scrollView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0);

UIWebView

加载网页:

[webVeiw loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://news.baidu.com"]]];
  • UIWebView 内部有个UIScrollView 所以给他加导航控制器也会加内边距

contentInset 的调整

  • 默认情况下,如果一个控制器A处在导航控制器管理中 并且控制A的第一个子控件是UIScrollView,那么就会自动调整这个UIScrollView的contentInset
    • UIEdgeInsetsMake(64, 0, 0, 0); 有导航栏
  • UIEdgeInsetsMake(20, 0, 0, 0); 没有导航栏
  • 默认情况下,如果一个控制器A处在导航控制器管理中 并且导航控制器又处于UITabBarController管理中 并且控制A的第一个子控件是UIScrollView,那么就会自动调整这个UIScrollView的contentInset
  • UIEdgeInsetsMake(64, 0, 49, 0); 有导航栏
  • UIEdgeInsetsMake(20, 0, 49, 0); 没有导航栏
  • 禁止上述的内容:

self.automaticallyAdjustsScrollViewInsets = NO;
scrollView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0);

给先前创建好的控制器加 xib

  • 注意我们要把控制的 view 设置为我们创建的 xib 不然会报找不到 view 的错误

  • 让文字换行的两个方式

  • xib 中 option +回车键 (这里加 \n 是不好用的)

  • 代码中 \n

  • 按钮的小细节

    • 按钮 和 label 不用设置他的长和宽 会根据他们的图片和文字自动设置
    • Button的样式为Custom 设置他的背景图片才是不会被修改的文字会变成默认18 直接设置 image属性会在自动变成Custom
      -Button 的 image 和 背景图 image 是原图的大小 背景图为整个控件的大小
  • xib 和 sb 不能直接往控件里添加另一个控件(需要一个 view)

修改状态栏的样式

  • ios 7 之前 方法
自己总结的小知识点_第3张图片
屏幕快照 2016-07-21 上午11.51.58.png

通过Application 来设置:

[[UIApplication sharedApplication]setStatusBarStyle:(UIStatusBarStyleLightContent)];
  • ios 7 之后方法
  • 优点 7之前设置而所有的 这个设置了当前的控制器
  • -(UIStatusBarStyle)preferredStatusBarStyle{
    return UIStatusBarStyleLightContent;
    }

Button 圆角的方法

  • 方法1

button.layer.masksToBounds = YES;
 button.layer.cornerRadius = 5;
  • 方法2 KVC XIB SB中使用


    自己总结的小知识点_第4张图片
    屏幕快照 2016-07-21 下午9.52.30.png

[button setValue:@YES forKey:@"layer.masksToBounds"];
[button setValue:@5 forKey:@"layer.cornerRadius"];
  • 给xib的约数 加动画


    [ UIView animateWithDuration:0.25 animations:^{

    • 强制刷新马上修改上面设置的约数
    • view 会把上面的子控件都刷新一遍
      [self.view layoutIfNeeded];
      }];
  • [ UIView animateWithDuration:0.25 animations:^{
    修改 UI 控件的代码(frame)
    }];

  • 自定义控件 的使用

    修改UItextField 的光标的颜色:

self.tintColor = [UIColor whiteColor];

带有属性的字符串(富文本)

  • 有两部分组成
  - 文字内容 : NSString *
  - 文字属性 :NSAttributedString
    - 字典的 key 值 带有属性的字符串 他是不可变的 要想便使用 他的子类NSMutableAttributedString
    - NSDictionary *
     - 文字颜色 - NSForegroundColorAttributeName
     - 文字大小 - NSFontAttributeName
     - 下划线     - NSUnderlineStyleAttributeName
     - 背景色    - NSBackgroundColorAttributeName
  • 用途 只要是显示文字的时候都可以使用它
  • 初始化

 NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
attributes[NSForegroundColorAttributeName] = [UIColor yellowColor];
attributes[NSBackgroundColorAttributeName] = [UIColor redColor];
attributes[NSUnderlineStyleAttributeName] = @YES;
NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
attributes[NSForegroundColorAttributeName] = [UIColor whiteColor];
NSAttributedString * string = [[NSAttributedString alloc] initWithString:self.placeholder attributes:attributes];
  • NSMutableAttributedString
  • 继承自 : NSAttributedString : NSObject
  • 常见的方法
//添加 range 范围属性 同一个范围,可以不断累加属性 一个一个的添加
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
//一次可以添加多个属性
- (void)addAttributes:(NSDictionary *)attrs range:(NSRange)range;
//设置 range 范围属性 重复设置统一范围的属性 最后一次才会有效哦
- (void)setAttributes:(nullable NSDictionary *)attrs range:(NSRange)range;

UIScrollView xib 和 sb 中添加约束

  • 上下滚动
  • 添加一个UIview 类型····················子控件1(UIScrollView唯一的一个子控件)

assign 和 weak 和 strong的区别

  • 相同点
    • 都是用来修饰对象类型的
    • 都是弱引用(弱指针) assign 和 weak 代理使用 weak block 使用 copy
    • 出了作用域会被销毁出了作用域会把指针清空
      不同点
  • assign 会生成 __unsafe_unretained _dog
    • 不保住他的命不对他计数加1
  • weak 会生成 __Nullable__weak_dog 可以为空的
    继续访问 assign 会报错 访问了僵尸对象 是因为他的指针还是指向原来的那个地址
    继续访问 weak 会把指针指向为空

所以 weak 是比 assign 安全的

@property (nonatomic,strong) NSString *dog;
// 会生成 NSString *__unsafe_unretained _dog的成员变量
// 1 不是强引用
// 2如果引用的 oc 对象销毁了 指针并不会被销毁  依然指向销毁的对象 产生野指针
@property (nonatomic,weak) NSString *dog;
// 会生成 NSString *__Nullable__weak_dog的成员变量
//不是强引用
//2如果引用的 oc 对象销毁了 指针并会被销毁指向 nil 永远也不会产生野指针

用途

  • assign 用在基本数据类型上面 比如 int double等 效率会快一点
  • weak 一般用在代理对象上面 用来解决循环强引用
  • strong 是强引用出了作用域不会销毁
  • strong 啥也没有 (默认)

如何监听一个空间内部的事件

  • 如果继承自 UIControl
//对象添加一个监听器 可以自己监听自己
-(void)addTarget:<#(nullable id)#> action:<#(nonnull SEL)#> forControlEvents:<#(UIControlEvents)#>
  • 代理成为他的代理
  • 通知 敲一下空间名看看有没有通知
  • 利用内部的某些机制

监听TextField的获得焦点和失去焦点

  • addTarget
    [self addTarget:self action:@selector(editingDidBegin) forControlEvents:(UIControlEventEditingDidBegin)];
//UIControlEventEditingDidBegin 1.开始编辑 2.聚焦 3. 弹出键盘

    [self addTarget:self action:@selector(editingDidBegin) forControlEvents:(UIControlEventEditingDidEnd)];
//UIControlEventEditingDidEnd 1.结束编辑 2. 失去焦点 3 .退下键盘
[self addTarget:self action:@selector(editingChanged) forControlEvents:(UIControlEventEditingChanged)];
UIControlEventEditingChanged 1 正在编辑的时候 写 删
  • delegate
  • 利用内部的某些机制
//调用时刻 : 成为第一响应者(开始编辑\\弹出键盘\\获得焦点)
- (BOOL)becomeFirstResponder
{
    self.placeholderColor = [UIColor whiteColor];
    return [super becomeFirstResponder];
}
// 调用时刻 : 不做第一响应者(结束编辑\\退出键盘\\失去焦点)
- (BOOL)resignFirstResponder
{
    self.placeholderColor = [UIColor grayColor];
    return [super resignFirstResponder];
}

枚举说明

  • (算数运算符)
  • 1 <<(左移) n == 2的n 次方
    | 按位或 只要有一个是1 结构就是1
    & 按位与 只有两个都是1 结果才是1
  • 枚举只有是这个类型的才可使用|(使用多个参数一个为1就为1)

CocoaPods

查看已想用的指令的方法 pod -install -help

  • Podfile.lock会保存最后一次更新 pods 时所有的第三方框架的版本号 用于团队开发,上传到服务器的时候不会上传 pods 文件(太大)我们要根据Podfile.lock自己下载第三方

  • 安装框架之前会默认执行 pod repo update 指令会把最新的第三方的版本下载到你的服务器 在根据你的指令判断是不是要更新第三方

  • 常见指令的区别

    • pod - install
      • 根据Podfile文件安装第三方框架
        • 会直接下载Podfile.lock中的版本号来安装
        • 如果一开始Podfile.lock文件不存在,会安装Podfile文件雷剧的版本号安装第三方
    • pod - update
      • 根据Podfile文件安装第三方框架
        • 会忽略Podfile.lock文件,将说有的第三方框架跟新到最新版本,创建一个新的Podfile.lock文件
    • pod - install -- no - repo - update
    • pod - update-- no - repo - update
      • 根据Podfile文件安装第三方框架
      • 不会执行pod repo update 指令就不会更新第三方的版本电脑上是什么就是什么

终端的常见 指令

  • pwd 显示当前路径

九宫格布局

  • 用 SDWedImage 设置button 的图片
     [button sd_setImageWithURL:[NSURL URLWithString:model.icon] forState:(UIControlStateNormal)];

解决tabview设置 tableFooterView 时 contrntSize 不正确的问题

  tabview.tableFooterView = footerView;
//   刷新数据(会从新计算contrntSize)
    [tabview reloadData];

查找字符串的常见方法

// 如果 range.location == 0 说明是以 searchString 开头
// 如果 range.location == NSNotFound 或者 range.length == 0 说明没有找到对应的字符串
- (NSRange)rangeOfString:(NSString *)searchString;
// 是否已 str 开头
- (BOOL)hasPrefix:(NSString *)str;
// 是否已 str 结尾
- (BOOL)hasSuffix:(NSString *)str;
//是否包含了 str 不管是 头部 中间 尾部
- (BOOL)containsString:(NSString *)str 

在控制器自定义的 view 里拿到相应点击的控制器

  UITabBarController *tab = (UITabBarController *)self.window.rootViewController;
    //获取那个位置的导航控制器
        UINavigationController *nav = tab.childViewControllers.lastObject;
        
        [nav pushViewController:webvc animated:YES];
//获取你选中的那个导航控制器
      UINavigationController *nav = tab.selectedViewController

数学计算公式

  • 已知总数 和每一行显示的最多数 求有多少行或者多少页
  • int rowsCount = (总数 + 每一行最多显示的数量 - 1) /每一行最多显示的数量

static 的作用

  • 1 static 可以修饰局部变量

    • 让局部变量只初始化一次
    • 局部变量在程序中只有一份内存
    • 但是他的作用域是不变的 变得只是他的生命周期
  • 2 static 可以修饰全局变量

    • c 语言 extern 的作用 引用
    • 默认的全局变量在程序中是都可以访问的 但是我们要想让他的作用域是当前文件 我们就要使用 static

copy 和 mutableCopy

  • 用 copy 也相当于 是一个强指针

  • copy 指针拷贝 浅拷贝

  • 用在不可变的 NSString..

  • 因为 我们这里产生的是不可变的,没有必要再去创建一个新的对象,说以苹果就直接拷贝指针

  • mutableCopy 对象拷贝 深拷贝

  • 用在可变的NSMutableString

启动时候隐藏状态栏

自己总结的小知识点_第5张图片
屏幕快照 2016-12-19 下午2.16.54.png

你可能感兴趣的:(自己总结的小知识点)