自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 收藏
  • 关注

原创 iOS触摸事件理解

## 如何确定由哪个视图响应触摸事件解决这个问题之前,我们先看下几个与之相关的类。### UITouch触摸,UITouch保存着跟手指相关的信息,比如触摸的位置、时间、阶段等。1. 当手指移动时,系统会更新同一个UITouch对象,使之能够一直保存该手指在的触摸位置。 当手指离开屏幕时,系统会销毁相应的UITouch对象。2. 一个手指触摸一次屏幕就会生产一个UITouch对象,多个手指同时触摸屏幕,就会生成多个UITouch对象。3. 单个手指多次触摸屏幕(类似于双击等操作...

2021-03-30 15:17:40 303

原创 objc4源码编译与调试

源码下载在Apple Open Source上选择对应自己的macOS版本下,下载objc4即可。笔者是macOS Catalina 10.15.6,所以选择的是objc4-787.1版本,顺便在该页面中下载Libc,dyld,libauto,libclosure,libdispatch,libpthread,xnu,libplatform这几个依赖库,编译objc4的时候需要用到。解决编译错误下载完成,解压之后我们打开工程文件,运行报错unable to find sdk 'macosx.

2021-01-08 15:11:08 481

原创 使用SourceTree拉取代码出现Permission denied (publickey)

Git拉取远程代码 或者使用SourceTree使用远程URL(SSH方式)克隆到本地显示Permission denied (publickey)首先确保在账号后台已经添加SSH Key如果尚未添加SSH Key:1.打开终端 输入 cat ~/.ssh/id_rsa.pub如果终端出现以ssh-rsa开头一串字符串,表示已经生成了SSH Key,直接复制或者使用 ...

2019-06-17 22:39:49 983

原创 LLDB调试增强插件Chisel安装与使用教程

chisel是一款facebook出品的LLDB调试器增强插件,添加了诸如pviews,show,hide等命令,详细可以查看chisel wiki安装我们可以使用Homebrew来安装chisel,没有安装Homebrew的同学请戳Homebrew安装已经安装了Homebrew可以直接使用下面的命令安装chiselbrew install chisel执行命令结果如上图表示已经完成...

2019-06-17 22:38:50 275

原创 Git 常用命令详解(一)

前言做iOS开发将近三年了, 版本控制Git和SVN都有所涉猎, SVN使用的一团糟糕稀里糊涂, 这里不谈, 今天的主角是Git, 之前一直都多使用的是Source Tree这个工具, 对命令少有涉及, 这次详细了解下, 以作记录.安装Xcode安装, Xcode偏好设置中找到Downloads,选择“Command Line Tools,点击Install就可以完成安装了使用Homeb...

2019-06-17 22:37:52 123

原创 iOS BLE蓝牙开发数据传输协议详解 常用算法(AES加密 HMAC_hash PRF)

前言这段时间参与了一款与蓝牙外设交互的项目, 以前没有涉及过数据传输方面的开发, 踩了不少坑, 同时也学到了很多东西. 此时, 项目也即将进入尾声, 有时间把这些记录一二. 本人才疏学浅, 如有错误,大佬轻喷.BLE4.0开发这方面网上的Demo一大堆, 暂时不做太多的赘述, 只对坑点做一个摘要.需求使然, 要对设备的接近远离有一个比较精确的计算, 使用的方案是对蓝牙的信号强度进行分析....

2019-06-17 22:36:37 1363

原创 undefinded sysmbols __objc__类名编译错误

1.Compile Sources没有导入文件2.search path不对3.重复编译,可能重复添加了 或者那个引用search path重复

2017-06-19 14:44:24 436

原创 copy和mutablecopy

对于系统的非容器类对象,我们可以认为,如果对一不可变对象复制,copy是指针复制(浅拷贝)和mutableCopy就是对象复制(深拷贝)。 如果是对可变对象复制,都是深拷贝,但是copy返回的对象是不可变的。 系统的容器类对象:指NSArray,NSDictionary等。对于容器类本身,上面讨论的结论也是适用的,但是注意的是,容器内的元素内容都是指针复制。如果需要元素对象也是对象复制,就需要实

2016-08-31 14:03:15 331

转载 iOS国际化

1、iOS程序名称国际化1.1 新建一个Single View app模版项目,命名为Localization。1.2 新建后,可以看到工作目录结构文件如下,单击InfoPlist.strings,查看右边的属性,在Localization栏添加语言。    1.3 添加完成后打开对应语言文件,比如English的添加CFBundleDisplayN

2016-07-04 13:37:33 413

原创 [TwistedFate]iOS多线程编程GCD

简介iOS有三种多线程编程的技术,分别是: (一)NSThread (二)Cocoa NSOperation (三)GCD(全称:Grand Central Dispatch) 这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的。三种方式的优缺点介绍:1)NSThread: 优点:NSThread 比其他两个轻量级 缺点:需要自己管理线程的

2016-01-15 18:59:13 502

转载 iOS_CoreData的使用

Core Data数据持久化是对SQLite的一个升级,它是ios集成的,在说Core Data之前,我们先说说在CoreData中使用的几个类。   (1)NSManagedObjectModel(被管理的对象模型)           相当于实体,不过它包含 了实体间的关系    (2)NSManagedObjectContext(被管理的对象上下文)     

2016-01-07 19:33:14 340

转载 [TwistedFate]NSURLSession

//所有类型的task都要调用resume方法才会开始请求 (IBAction)BlockButton:(id)sender { //快捷方式获得session对象 NSURLSession *session = [NSURLSession sharedSession]; NSURL *url = [NSURL URLWithString:@”http://mobile.ximalaya.

2016-01-05 21:07:47 293

转载 22 款开源的 iOS 应用菜单 (Menu) 控件

PaperFoldMenuControllerPaperFoldMenuController 是一个UITabBarController 的替换品,显示了视图控制器在表视图在屏幕的左边。你可以拖动 隐藏/显示左边的菜单。从菜单中选择左边的更改视图控制器在右边。PaperFoldMenuController使用视图控制器安全壳。...Drop Down MenuDIYMenu

2015-12-31 20:07:29 964

原创 [TwistedFate]UIWebView的简单使用

UIWebViewUIWebView就是一个可以帮我们打开网站的浏览器界面,我们对这个页面操作就相当于浏览器操作UIWebView使用的三种情况整个几面的排版比较复杂,需要很多判断整个界面整体布局改变非常大需要访问某个网站的时候UIwebView的加载方式利用requset加载// 初始化一个NSURLRequset对象NSURLRequest *request = [NSURLRe

2015-12-30 17:34:20 389

原创 [TwistedFate]多线程编程NSOperation

常用开启多线程的方法NSOperation 封装一下GCD的方法 提供OC的语法来使用GCD2.GCD 官推 可以最大化的发挥多核CPU 是C语言的函数 NSOperation 是一个抽象类NSBlockOperationNSInvocationOperation线程队列1.串行队列 主线程相当于一个串行队列 队列中的任务 需要一个执行完毕后 再执行下一个2.并行队列 队

2015-12-18 22:19:19 346

原创 [TwistedFate]多线程编程NSThread

多线程编程进程,线程正在活动(运行的)一个应用程序,就是一个进程;每一个进程都至少有一个线程,主线程线程:每一个线程都是独立的,可以执行任务除了主线程,剩下的都是子线程,子线程可以有很多个 ,但是线程是耗费资源的(一般不超过5条,3条为佳)主线程操作的任务:一半时间UI界面的现实,按钮的点击,屏幕滚动,基本一切用户能看见的操作均在主线程中操作比较大的耗时操作都可以在子线程中操作 比如:下

2015-12-18 21:47:03 395

原创 [TwistedFate]UICollectionView

集合视图UICollectionViewLayout抽象类,具体功能由他的子类实现, 网状结构的布局创建一个网状的结构布局,设置具体的属性UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];// 最小行间距 layout.minimumLineSpacing = 20; //

2015-12-11 20:46:05 378

原创 [TwistedFate]数据库初级使用

SQLite数据库使用步骤: 1. 引入libsqlite3.0框架 2. 在数据库操作类里 引入创建单例类实现数据库的管理使用// 单例的初始化方法+ (SQLiteManager *)shareManager;// 插入数据- (void)insertTableWithStudent:(Student *)stu;// 删除数据- (void)deleteWithAge:(NSI

2015-12-08 20:25:57 397

原创 [TwistedFate]初级数据持久化

初级数据持久化沙盒沙盒机制每一个APP安装到手机上或者模拟器上, 都会自动生成三个文件夹 这三个文件夹叫沙盒 可以理解为这个APP的沙盒每个APP的文件夹都是相对独立的 只能自己的应用去访问 不可以互相访问文件夹中 存储的是 代码以外的 所有数据 例如(图片素材 声音 视频 文档等)也就是说 持久化文件(缓存文件)可以存储到 文件夹中打开沙盒的各个文件夹路径- (void)path{

2015-12-07 20:44:53 487

原创 [TwistedFate]KVO监测Model图片加载

KVO监测Model图片加载使用上一篇的ImageDownLoader类 目的:网络请求数据时,由于图片比较大,加载较慢,可以先加载数据,并显示,而图片可以之后分开加载,加载完再显示详细步骤在加载数据的model类中添加属性,方法及遵守协议<ImageDownLoadDelegate>// 请求图片类@property (nonatomic, retain) ImageDownLoade

2015-12-07 20:17:14 446

原创 [TwistedFate]图片异步加载,KVO

异步下载图片自定义类imageDownLoader类思路: - 异步下载图片首先需要一个网址字符串 (需要传入一个字符串) - 加载完图片数据需要将一个data传给controller显示(代理传值) - 考虑到异步加载可能成功,也可能失败 代码实现: - 定义协议// 创建一个协议@protocol ImageDownLoadDelegate <NSObject>// 请求成功-

2015-12-05 14:46:54 357

原创 [TwistedFate]iOS网络编程

网络编程NSURLurl,统⼀资源定位符,也被称为⺴址,因特⺴上标准的资源⺴址 url的语法: 协议://授权/路径?查询 - url作为网址字符串包含很多请求参数,NSURL对网址字符串进行封装 可以使用NSURL对象获取相应的参数 - absoluteString: http://lily:[email protected]/search? hl=en&source=hp

2015-12-03 19:58:31 357

原创 [TwistedFate]XML JSON数据结构解析

XML数据解析SAX解析simple API for XML解析xml数据- (void)xmlParserUpData{// 利用的是系统的NSXMLParser// xml分析类// 以驱动事件进行xml的解析(利用触发得的代理方法解析)// 特点: 逐行解析// 获取路径 NSString *path = [[NSBundle mainBundle] pathFor

2015-12-02 22:39:52 401

原创 [TwistedFate]Block

BlockC语言block回顾返回值是int类型 求两个数和的blockint (^block)(int, int) = ^int (int a, int b){ return a + b; }; NSLog(@"%d",block(3,5));给block起别名typedef int(^WLBlock)(int a, int b);用别名申明一个block WLBlock n

2015-12-02 22:03:22 320

原创 [TwistedFate]TabBarController

TabBarController创建控制器 创建导航控制器// 创建控制器FirstViewController *firstVC = [[FirstViewController alloc] init];// 创建导航控制器UINavigationController *firstNaVC = [[UINavigationController alloc] initWithRootView

2015-12-02 21:38:45 326

原创 [TwsitedFate]单例

单例Sington单例类:从程序的开始运行到结束 就只有一个对象 并且不用手动释放,随程序的结束会自动释放单例的作用单例传值(利用了程序运行期间 就一个对象的特点)可以封装操作类(数据操作)+ (MySington *)shareHandle{ // 定义一个静态去的指针 static MySington *handle = nil; // 如果指针指向空的话

2015-11-26 14:30:03 301

原创 [TwistedFate]UITableViewCell自定义-02

UITableViewCell自定义cell分区的行高自适应采用类方法,是为了在返回cell的行高时调用// 计算字符串的高度+ (CGFloat)cellHeightForModel:(NewsModel *)model{ // 创建字体大小的字典 // 字面量初始化 NSDictionary *dic = @{NSFontAttributeName : [UIFon

2015-11-24 22:03:09 350

原创 [TwistedFate]Label自适应高度

Label的自适应高度创建一个labelUILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 300, 100)];label.numberOfLines = 0;label.font = [UIFont systemFontOfSize:16];label.backgroundColor = [UIColor

2015-11-24 20:35:15 551

原创 [TwistedFate]UITableViewCell自定义-01

自定义cell步骤:创建TableViewCell的子类重写初始化方法要添加的控件添加到到cell的现实内容区域contentView上面 把系统的cell 替换成自定义cell 完成创建MyTableViewCell类// 自定义初始化- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(

2015-11-24 20:22:30 378

原创 [TwistedFate]UITableView表视图编辑,移动

UITableView编辑数据准备// 初始化数据- (void)initializeData{ NSArray *array = @[@"0", @"1", @"2", @"3", @"添加"]; NSArray *array2 = @[@"0", @"1", @"2", @"3", @"4", @"添加"]; self.firstArray = [NSMutableAr

2015-11-23 19:10:32 449

原创 [TwistedFate]UITableView表视图

表示图TableView表视图UITableView,iOS中最重要的视图,随处可⻅见。表视图通常⽤用来管理⼀一组具有相同数据结构的数据. 步骤与之前一样,先创建根视图,因为tableView的实现方法比较多,可以创建一个addTableView方法,然后在视图控制器的viewDidLoad中调用.初始化以及代理设置- (void)addTableView{// 初始化UITableVie

2015-11-21 19:21:02 406

原创 [TwistedFate]导航视图控制器

导航视图控制器UINavigationController导航控制器,是iOS中最常⽤的多视图控制器之⼀,它⽤来管理多个视图控制器。 导航控制器可以认为是管理控制器的控制器,主要管理有层级关系的控制器 UINavigationController通过栈的⽅式管理控制器的切换,控制⼊栈和出栈来展⽰各个视图控制器 UINavigationController的ContentView⾥始终显⽰栈顶控

2015-11-19 19:37:01 444

原创 [TwistedFate]UIScrollView UIPageControl

UIScrollView初始化及添加背景色UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:[UIScreen mainScreen].bounds];scrollView.backgroundColor = [UIColor cyanColor];设置显示内容区域scrollView.contentSize = CGSi

2015-11-18 19:42:01 310

原创 [TwistedFate]滑块UISlider 跑图UIImageView

UISlider初始化及设背景色UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(40, 100, 300, 20)];slider.backgroundColor = [UIColor redColor];设置轨迹颜色[slider setMinimumTrackTintColor:[UIColor greenColor]

2015-11-17 19:23:30 555

原创 [TwistedFate]UISegmentedControl

1

2015-11-16 22:16:38 527

原创 [TwistedFate]UIActionSheet

UIActionSheet上拉菜单:基本常用方法与弹窗AlertView差不多初始化UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"确认删除?" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"确定" otherButtonTitle

2015-11-16 22:08:56 316

原创 [TwistedFate]UIAlertView

AlertView初始化UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"确定删除?" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];添加button[alert addButtonWithTitle:@"注册"];修

2015-11-16 21:57:31 312

原创 [TwistedFate]手势识别器

手势识别器抽象类:这个类是抽象类 其具体功能 交给子类去实现 (省代码) ⼿势识别器是对触摸事件做了封装,我们⽆需⾃⼰去判断某个⼿势 是否触发,⼿势识别器本⾝起到了识别作⽤,我们把重⼼放在识别之 后要做什么操作上⾯ 根视图准备满屏的ImageView// 创建imageView 添加手势用 UIImageView *imageV = [[UIImageView alloc] init

2015-11-16 20:13:41 299

原创 [TwistedFate]代理设计模式

使用协议代理的步骤 先创建协议 1.遵守协议 2.实现协议中的方法 3.设置代理(添加代理对象为实例变量) –(谁需要代理 在那个类里声明实例变量) 4.添加设置代理对象的方法(set方法) 5.让代理干活(让代理去调用协议中的方法) 6.从main创建对象 设置代理对象点击UIImageView换背景色创建协议@protocol UIButtonImageViewDelegate <

2015-11-16 19:56:13 346

原创 [TwistedFate]触摸事件 晃动事件 target/action

触摸事件的方法创建TouchView类 并在根视图控制器里初始化 类里 添加触摸事件响应方法- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ NSLog(@"开始摸"); // UITouch保存手指的信息 例如触摸的点// UITouch *touch = [touches anyObjec

2015-11-14 11:37:05 505

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除