自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Anybody capable of love is capable of being saved.

这家伙很懒,没有博客描述...

  • 博客(61)
  • 收藏
  • 关注

原创 UIWebView 键盘事件的处理思路以及方法

在 iOS 的项目中,经常会遇到内嵌网页的场景,而网页内的输入框也比较常见。一般来说,键盘的弹起事件和防止遮挡输入框是由前端同学处理的,但可能因为种种原因,这个锅可能甩到我们 iOS 工程师身上。锅从天而降,不接也没法。那就逆向思维,分析一下具体的实现思路吧:结果: 键盘弹出后,webView 需要上移某一个距离,保证不遮挡输入框。(如何获取正确的距离?)↓获取距离: 计算输入框距离屏幕...

2019-03-30 15:00:01 909

原创 AppleWatch 开发的一些知识总结

最近忙了一阵子Apple Watch 的开发。虽然Apple Watch 4马上就要发布了,但详细的中文开发资料还不是很多。我这里就不按照步骤走了,总结一下非常规的知识点以及个人理解。静态布局所有静态UI控件都在 Storyboard 上完成,彻底抛弃frame的概念。WatchKit 布局方式很像CSS,包括绝对布局和相对布局,支持横向排列和纵向排列,UI之间无法重叠。但可以使用 ...

2018-09-01 14:57:58 3383

原创 iOS12 Siri ShortCuts 应用 (二)

上一篇文章 iOS12 Siri ShortCuts 应用 (一) 主要写了通过 NSUserActivity 实现 Siri ShortCuts 的方案。具体功能就是通过用户自定义的siri 语音指令, 利用siri打开app, 完成用户想要的功能。今天这篇文章就来介绍另外一种功能,通过 Intents Extension 实现不打开app 去完成某个任务。先来看下效果: 正式开始...

2018-08-05 14:53:13 5758 11

原创 iOS12 Siri ShortCuts 应用 (一)

本文介绍 Siri ShortCuts 的应用之一,可实现的功能是: 1、通过自定义 siri 短语打开 app , 并完成你想要完成的操作。 2、根据对用户行为的记录,让系统智能预测用户行为,并给出提示。 3、app 内引导用户添加或者修改语音指令。先在项目的 plist 文件里定义 属性为 Array 的 NSUserActivityTypes,为其添加对应的属性值,比如:’com...

2018-07-08 18:56:27 5662 1

原创 iOS 视频录制流程解析

这篇文章主要介绍在 iOS 中视频录制的主要流程,以及功能细节。在 iOS 系统中,录制视频有两种方式,一种是直接利用系统封装好的 UIImagePickerController ,系统的功能呢空间,优点就是使用起来简单,缺点就是难于满足个性化 UI 和功能。主要代码如下:注意需要写在 init 方法里 self.sourceType = UIImagePickerControll...

2018-05-26 17:40:31 1784

原创 UITableView 聊天界面顺滑下拉刷新的技巧

正常的列表下拉请求第一页,上拉加载更多。而聊天对话中的 UITableView 与正常列表是有区别的,都是默认显示最新的对话,下拉请求更多。下拉后要处理数据源的反向拼接和定位滚动的位置。数据源拼接操作不当,就会出现数据错乱。而定位滚动如果处理不当,会出现界面闪动,定位不准确的问题。这里就按照微信的聊天下拉效果,写下代码实现:假设网络请求,获取到数据 responeData 数组:一...

2018-05-01 16:37:07 2458

原创 GCD案例解析

在GCD中可以通过 dispatch_get_global_queue 获取全局并发队列。也可以自己去创建队列,而已指定该队列是并发还是串行对接。下面这个例子是获取全局队列,在里面创建了三个异步的线程。dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dis...

2018-03-11 19:00:26 313

原创 富文本点击事件-TTTAttributedLabel和YYtext的不同用法

在很多 TimeLine 的排版页面,都会用到富文本,多样式的文字展示,以及为某些特殊文字,比如@,# ,以及网址添加点击事件。这里就以为 @ 和 # 添加不同样式和点击事件 和 替换网址为某个特定图片,以及添加点击事件的功能,介绍一下主流应用的两个第三方库,TTTAttributedLabel 和 YYText 的一些用法。TTTAttributedLabel TTTAttributedL

2018-01-21 16:15:16 6147

原创 AVPlayer 无间隔循环播放

AVPlayer 可以实现音频或者视频文件的在线播放和本地播放。最近做了一个单曲循环播放的功能。一开始选择了下面这个方法:- (void)replaceCurrentItemWithPlayerItem:(nullable AVPlayerItem *)item;但尝试后发现两首音乐无法完美衔接,中间会有一个短暂的停留,这个不太符合我们的需求。尝试在播放完后,重新创建播放器,继续播放这

2018-01-14 16:29:23 347589 3

原创 iOS 播放音频的几种方式

对于比较短促的声音,比如系统的推送声音和短信声音,官方要求不要超过30s。开始播放NSString *filePath = [[NSBundle mainBundle] pathForResource:@"done" ofType:@"wav"];NSURL *fileUrl = [NSURL URLWithString:filePath];SystemSoundID soundID = 0;

2017-12-10 17:14:36 15111

原创 iOS 分享多张图片到第三方平台

最近接到了一个分享多张图片到微信,微博,等平台的需求。项目里用的是友盟分享,但其并不支持分享多张图片。自然就想到了 UIActivityViewController ,最后分享是成功了,但在使用过程中遇到了几个坑点,记录一下:最初的方案是直接分享UIImage:self.activityViewController = [[UIActivityViewController alloc]

2017-11-10 21:36:05 3209 1

原创 iOS截图的几个场景以及解决方案

一、截取整个屏幕或者根据 frame 截取屏幕内某个固定区域二、截取整个 UITableView 或者 UIScrollView 的内容(包括屏幕外的部分)三、截图某个 UIView 的内容

2017-10-13 18:59:59 647

原创 ARC环境下循环引用案例

虽然ARC环境帮助我们做了很多事情,完美的解决了大多数情况下对象的自动释放。但在使用black的情况下,如果不注意,循环引用还是会发生的,导致对象无法释放。循环引用发生不一定会造成直观的现象,但某些场景下却会带来问题,比如在某个 Controller 注册了 self 为观察者,一般会在 dealloc 中移除观察者。但如果页面无法释放,再次进入这个 Controller 就会重复注册观察者,会出现

2017-09-24 19:47:51 340

原创 UIButton 获取网络图片的排版技巧

最近在做 UI 的时候,遇到一排 button 需要通过后端来控制它的 image 和 title。但由于 Android 和 iOS 对图片要求的尺寸有差异,因此通过后端开控制图片大小比较麻烦。

2017-09-10 15:18:34 3442

原创 最近工作中遇到的问题以及解决方法总结

项目编译报错 linker command failed with exit code 1 (use -v to see invocation)对着这个错误,很常见,但引起这个错误的原因却是千奇百怪。这种错误很隐蔽,因为没有详细的错误信息提示。网上也有很多解决方案。但由于原因不一样,所以都无解。后来发现在执行 pod install 的时候,有一个警告:

2017-08-25 21:27:05 6101

原创 JavaScript 中 for 循环的独特之处

总结:js 中的 for 循环在正常循环的基础上,新增了对对象的遍历功能。另外对数组和字典的遍历返回的是下标或者 key 值。

2017-08-20 20:36:55 311

原创 HTML 引入 CSS 的几种方式

最近刚开始在学习前端的相关知识,学习新的一门语言确有一定的挑战。尤其学习前端,除了需要了解到一些基础的知识比如 html , css , js ,还要学会使用被广泛使用的一些架构,比如 AngularJS , jQuery , Bootstrap 等。万事开头难,其他废话就不说了,这里记录以下 html 引入 css 的几种方式吧。一、嵌入式嵌入式需要在使用这些样式之前,定义你所需要使用的 CSS

2017-08-12 17:14:15 783

原创 Objective-C 与 Javascript 交互之 WebViewJavascriptBridge

大多数的 App 都会有嵌入网页的做法,因此可能就会遇到原生与网页里的交互的场景。交互无非就两种情况,要么是 Objctive-C (以下简称 objc ) 调用 JS 的方法,要么 JS 调用原生的方法。考虑到效率和拓展维护,在开发过程中我选择了一个被开发者广泛使用的一个优秀的开源库 WebViewJavascriptBridge 。使用起来也比较简单,但是需要前端工程师的配合,在 JS 里

2017-08-04 18:39:20 509

原创 ReplayKit 的屏幕录制功能

苹果在 iOS 9 中新添加了 ReplayKit 库,主要作用就是 RPScreenRecorder 的屏幕录制功能。在 iOS 10 中,苹果又为 ReplayKit 添加了RPBroadcast 相关的类,主要用于视频直播。这篇文章说的是屏幕录制,以后可以研究一下苹果官方推出的的直播,还是蛮期待的。

2017-07-22 16:52:02 9861 2

原创 分离 UITableView 的 Delegate 和 Datasource

UITabelView是在项目中很常见的一个控件,因此也就意味着你要重复的写这样相同的代码。当然,有很多选择了使用自定义代码块,解决了重复写相同代码的弊端。但对于整个项目来说,重复的代码还是显得过于臃肿。这里就分享一下另一种解决方案,分离UITableView的Delegate 和 Datasource。

2017-07-16 16:34:08 940

原创 适当的时候,用递归取代for循环

在开发过程中,for循环是一个很常见的操作,但有时候针对某些需求它却显得有些吃力。 比如:按照顺序下载多张图片。1、正常的做法: 使用for循环下载,代码如下:for (NSString *photoUrl in photosUrlArray) { [[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWit

2017-07-09 17:29:43 1653

原创 支付宝指纹解锁流程分析以及代码实现

经常使用支付宝的的指纹登录,既安全,又方便。抽空就结合着指纹的相关知识,理了一下这个流程。在梳理支付宝指纹流程之前,先熟悉一下关于指纹解锁的知识。指纹解锁的相关类位于 LocalAuthentication.framework 。这个库内容比较少,所以不是很复杂。主要方法如下判断 TouchID 或者手机密码是否可用- (BOOL)canEvaluatePolicy:(LAP

2017-05-19 16:19:54 2881

原创 iOS实现3D旋转

最近看到了一个3D旋转的动画,就想着自己去实现以下。那么,接下来就通过这边文章记录以下学习过程,慢慢深入了解以下3D旋转。一、如何旋转每个View都在系统的坐标系中,就手机屏幕来说,左上角为 (0 , 0),向右横向的为X轴正方向,向下纵向的为Y轴正方向,垂直于手机屏幕的方向既Z轴方向。 所以Z轴的旋转属于平面上的旋转,实现3D效果的前提就是有X轴或者Y轴的参与。二、沿着Y轴旋转先看一下CATra

2017-04-02 14:09:58 5774

原创 自定义转场动画(二)

之前介绍一篇文章 自定义转场动画(一),主要介绍了Present的转场动画。今天介绍一下有关Push的转场动画。准备:首先要两个UIViewController和一个继承与UIPercentDrivenInteractiveTransition的类。ViewController1ViewController2PushTransitionAnimatorPushTransitionAnimator

2017-03-05 18:51:42 509

原创 PhotoKit相册的性能优化

有关PhotoKit的基础知识,参考我的另一篇博文: 优雅的创建一个相册管理类。 这篇文章记录一下在实际项目中,自定义相册的优化工作。之前的文章提到过,获取照片高清原图使用下面的方法: PHImageManager *manger = [PHImageManager defaultManager]; PHImageRequestOptions * options = [[PHImage

2017-02-12 21:44:58 2291

原创 iOS10注册推送的细节

iOS10注册推送,兼容低版本1,注册- (void)startAuthority{ if (iOSVersionGreaterThanOrEqualTo(@"10")) { UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; [cen

2017-01-10 23:49:18 342

原创 自定义转场动画(一)

两个Controller之间的交互,相比正常的Push和Present,转场动画是iOS里比较酷炫的一种效果,能够以各种效果平滑的切换两个不同的视图控制器。适当的运用转场动画,会让你的APP变得更加生动有趣。这篇文章会以Present为例,讲述如何自定义一个转场动画。后续会有Push,以及更复杂的转场介绍。准备:首先要两个UIViewController和一个继承与UIPercentDrivenIn

2017-01-08 15:45:25 981

原创 The "sampleIndex" KeyPath Of CABasicAnimation

AnimationWithKeyPath 是实例化 CABasicAnimation的方法,其中iOS内部已经实现了多种多样的keypath。这里记录一下一个不常见的keypath — “sampleIndex”。该动画能把一个图片从头开始播放。如下面这样一个图片: 我们设置好一个layer。其中 MCSpriteLayer是继承与CALayer的一个开源类。CGImageRef imgRef

2016-12-18 16:27:08 351

原创 使用bundle管理多版本Cocoapods之间的协助开发

使用bundle管理多版本的Cocoapods

2016-11-26 19:26:29 4006

原创 CocoaPods 升级的注意事项

最近在做项目的时候,执行pod install的时候,报错: [!] Unable to find a specification for DateTools (~> 1.5.0) 。很明显是一些库找不到了,估计是repo仓库需要更新了。于是执行: pod repo update,但却提示:[!] Themasterrepo requires CocoaPods 1.0.0 - (currentl

2016-11-20 10:53:12 780

原创 UIActivityViewController及其自定义

UIActivityViewController 是iOS很早就推出的一个分享控制器。集成了一些和系统服务进行交互的接口。先通过它的构造方法来慢慢了解它的内部结构:- (instancetype)initWithActivityItems:(NSArray *)activityItems applicationActivities:(nullable NSArray__kindof UIA

2016-11-11 22:13:14 3928

原创 利用cordova生成ipa文件

1、下载安装node.js环境 官网:http://nodejs.org/2、安装cordova:sudo npm install -g cordova3.创建新项目cordova create ProjrctPath com.myproject.demo MyProject其中:第一个参数是工程目录,第二个参数是Bundle identifier, 第三个参数是显示的工程名创建完成后工程结构如

2016-11-05 22:31:00 6634

原创 快速集成 iMessage(下)

上一篇文章主要讲述了有关Sticker的快速集成,这篇文章就说一下如何在信息应用里集成自定义的列表界面,以及信息的交互。在上篇文章中提到,显示界面的ViewController是Xcode 自动为我们创建的 MessagesViewController。 不管是添加Stiker(贴纸,表情),还是我们自定义的view,最终都是要放到 MessagesViewController 当中的。1、 创建

2016-10-30 14:26:27 1463 2

原创 快速集成 iMessage (上)

iMessage 是iOS10 新推出的一个 App Extension,能够在系统应用信息中,加入我们自己的内容,发送给好友,甚至能和好友对同一条信息就操作。本篇文章主要讲如何在 iMessage中快速集成表情。App Extension和宿主App具有各自独立的空间,因此iMessage Extension也既可以单独存在,也可以与宿主App集成到同一个项目中,一起打包上传,用户下载iMessa

2016-10-22 16:28:27 2975 3

原创 App Extension 与 App 之间的数据共享

App Extension 是 iOS8之后推出的一个新的功能,从开发者的角度来说,苹果提供的接口更加开放了。我们可以通过App Extension去拓展Today,分享,键盘等。在iOS10 又推出了iMessage 和 Siri 的拓展。可见App Extension也越来越重要。如图所示:这篇文章主要说明一下App Extension 与 App 之间的数据共享,至于如何创建 App Ext

2016-10-15 14:01:49 4545

原创 UITableView下拉隐藏背景色

如果给UITbaleView设置背景色,那么在bounce属性不禁用的话,下拉或者上拉,都会出现tableView的背景色。如下图: 下拉的时候,在与导航的衔接处出现了背景色。有些界面为了保持上部的美观,要求在下拉的时候保持HeadView的背景色,在上拉的时候显示tableView的背景色。第一个实现思路是:创建一个和背景色一样的view,与tableView处于同级,但在tableView之上

2016-09-27 22:36:10 3849

原创 iOS 中 Block 和 Closures 简介

目前iOS开发有两种语言,Objective-c 和Swift。在Objective-c中,block的使用非常频繁,在开发中占据了很重要的位置。 Closures,通常被称作闭包,同样是Swift语言中很重要的一个部分。其功能类似Objective-c中的block。先回顾一下block的用法:通常来说,block的作用是保存一段代码,在需要的时候去执行。一,声明block的语法格式为:retur

2016-09-24 18:32:05 386

转载 UIWebView的数据缓存

大多数App内部都会采用UIWebView加载的,虽然这样减轻了客户端的工作量,但是,不可避免会遇到网络差,服务器不稳定等的情况,在这种情况下,webView的加载效果就很差了,严重影响客户体验。下面介绍一个NSURLProtocol的缓存的思路 一、原理 主要是通过继承NSURLProtocol,自定义一个子类,然后可以轻松的重新定义苹果的URL加载系统 (URL Loading System

2016-09-17 21:56:07 351

原创 Objective-C中空值的不同表现形式

在开发过程中,对空值的处理是非常常见的一个操作,但稍有不当,就会造成结果异常,甚至程序崩溃。声明一个字符串,用来接收后台对于的数据。先来说一下Null, 在C语言里Null代表一个不存在的指针。Objective-C在C的基础上又添加了一个nil,代表着一个指向一个不存在的对象的指针。

2016-09-02 23:56:08 848

原创 AFNetworking的数据请求的几种方法

1、AFHTTPSessionManager 解析json , xml NSString *url = @"http://www.to8to.com/mobileapp/zxdiary.php?action=getdiary&digest=0&p=1&pg=15&type=0"; AFHTTPSessionManager *_session = [AFHTTPSessionMa

2016-08-28 14:10:49 692

空空如也

空空如也

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

TA关注的人

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