iOS核心动画技巧学习 -- CALayer的历史追溯

  • 异同
    • UIView负责用来处理和用户的交互
    • CALayer负责真正的在屏幕上显示和做动画
  • 关联(平行的层级关系)
    • 一个视图只有一个相关联的图层,初始化视图的时候自动创建,暂且叫为根图层,视图的职责就是创建并且管理这个图层
    • 但是我们也可以自己创建单独的图层,来添加为某个视图相关联的跟图层的字图层,如图所示
    • Mac OS平台10.8之前,一个显著的性能缺陷就是用了视图层级而不是单独在一个视图里面使用CALyer树状层级;10.8之后 NSView性能得到了大幅度提高
    • IOS平台,作为比较轻量级的UIView并没有显著的性能影响
    • 视图层级优点:可以在使用所有的CALayer底层特性同时,也可以同时使用UIView的高级API(自动排版,布局和事件处理)
    • CALayer优点:开发同时可以在Mac OS上运行的跨平台应用,使用多种CALayer的子集
  • 原因(职责分离)
    • 为什么不用一个简单的层级来处理所有的事情,而是需要基于UIViewCALayer提供俩个平行的层级关系
    • iOS和Mac OS俩个平台上,事件和用户交互方面:基于多点触控的用户界面和基于鼠标键盘有着本质的区别 ,这既是为什么iOS有UIKit和UIView,Mac OS有AppKit和NSView,这样俩个平台就能共享Core Animation框架,共享代码,使得开发更加便捷

终端提交代码到github

具体步骤

  • 写好自己的demo,假如说在桌面
  • 配置好电脑和github的SSH
  • 在你的github新建一个仓库
  • 复制新建项目的https地址
  • 打开终端,cd到你的根目录(其实哪里都行,就是你电脑上管理你github代码的地方,方便以后一起管理)
  • 使用命令行 git clone https://github.com/tutu279737146/CTMediator-Demo.git,(将后面的URL换成你的仓库地址)
  • 成功以后,再次用命令行cd到当前的项目的路径下cd CTMediator-Demo
  • 打开你的桌面上的项目工程,将需要上传的文件复制到需要上传的目录下(这里是根目录)
  • 初始化git仓库,git init
  • 添加文件到git git add .
  • 提交到本地代码仓库 git commit -m "提交代码"
  • 提交到远程仓库,别名是origin git remote add origin https://github.com/tutu279737146/CTMediator-Demo.git
    • 如果报错存在origin,那么先删除git remote rm origin
    • 再重新提交git remote add origin https://github.com/tutu279737146/CTMediator-Demo.git
  • 推送本地代码到服务器git push -u origin master,将本地的源码push到github别名为origin的远程项目中
    • 如果报错说本地文件不是最新的,需要先拉取远程文件git pull origin master
    • 再重新pushgit push -u origin master

Xcode 9拖入框架报错问题

  • 问题描述

    拖入一张图片或者一个下载好的第三方框架文件到目录结构下,编译不报错,运行时会报错;

  • 问题原因

    可能是Xcode 9的一个bug,编译期间没有添加文件到Compile Sources

  • 问题重现

    1. 拖入下载好的Masonry框架到项目中;
    2. 导入头文件,使用;
    3. 查看TARGETS ~> Build Phases ~> Compile Sources,发现没有自动添加到Compile Sources;
    4. Command+b,编译成功(说明Xcode甚至没有检查对错);
    5. Command+r,运行报错;

more >>

LLDB进阶调试--image寻址崩溃行

  1. 出现场景

    开发中难免会遇到这种情况:即时打了全局断点,程序还是崩溃在main函数处;此时我们需要利用image寻址,通过堆栈信息来找到崩溃行,从而找出问题所在并解决问题.

  2. 模拟现象

more >>

UITextView文字不从顶部开始

问题描述

不知道大家有没有遇到过这样的情况,有的时候自己的UITextView控件显示的内容并不是从顶部开始的,而是从中间的部分开始显示;

模拟出现原因

  1. xib中: View as选择大尺寸屏幕,(此处是iPhone 8),textview约束设置为相对view上下左右全是0;
  2. 运行在iPhone 5s上;
  3. 现象如下图

more >>

将tableview的cell宽度变窄

最近公司新开了一个项目,有点小忙.准备忙里偷闲将项目过程中遇到的和之前遗忘的问题总结一下,方便学习和以后查阅.

  • 需求

需要将cell的宽度短于tableview的宽度,左右留下间距,美观;如图

more >>

Swift3.0学习--GCD和尾随闭包

GCD

  • 获取队列
1
2
3
4
5
6
7
8
//Swift 获取全局队列
DispatchQueue.global()
//OC 获取全局队列
dispatch_get_global_queue(long identifier, unsigned long flags)
//Swift 获取主队列
DispatchQueue.main
//OC 获取主队列
dispatch_get_main_queue();
  • 获取线程
1
2
3
4
//OC
[NSThread currentThread];
//Swift 去掉了NS前缀
Thread.current

尾随闭包

  • 定义

当函数的最后一个参数是闭包,那么函数的参数可以提前结束,最后一个参数直接使用{}来包装闭包的代码

1
2
3
4
5
6
//示例
DispatchQueue.main.async(execute: () -> Void)
//因为只有一个参数,那么就是最后一个参数,参数名是execute,参数类型是一个闭包,所以可以变为:
DispatchQueue.main.async{
} //现在的Swift版本可以直接敲出来

利用闭包传递参数

  • 原因

```

```q

Swift3.0学习--函数及闭包

函数

  • 格式
1
2
3
4
5
6
func 函数名(参数名:参数类型..)-> 返回值{
//代码实现
}
func name(parameters) -> return type {
function body
}
  • 函数的普通调用
1
2
3
4
5
6
7
8
9
10
11
//定义函数
func sum(x: Int, y: Int) -> Int {
return x + y
}
//调用
//Swift1.0调用
print(sum(10, 12))
//Swift2.0调用
print(sum(10, y: 12))
//Swift3.0调用
print(sum(x: 10, y: 12)) //输出:22

more >>

Swift3.0学习--数组和字典

数组

  • 定义
1
2
let array = ["小明","中花","大杨"] //不可变
var arrayM = ["小","中","大"] //可变
  • 遍历

    • 下标遍历

      1
      2
      3
      4
      5
      for i in 0..<array.count {
      print(array[i]) //输出:小明
      // 中花
      // 大杨
      }

      more >>

这个人很帅<br>他什么都不想说<br>