- 博客(257)
- 资源 (17)
- 收藏
- 关注
原创 iOS区分不同版本URL schema
iOS项目开发中,同一个APP,在打包时,通常有三种版本:mobile版本,inhouse版本,App Store版本。前者用于程序员debug,inhouse用于测试同学、产品同学和公司其他同学的安装,最后的App Store则是发布版本。三个APP只是bundleID不同,证书不同。功能是完全一致。同一个设备上可安装三个APP,有些情况会给开发调试造成困扰,比如:APP带有第三方登录功能,用mobile版本APP登录,调起微信,授权后返回。由于mobile,inhouse,App Store三个APP都
2017-06-14 16:04:17 3401
原创 [算法]iOS 视频添加水印,合成视频两种方案(整体渲染和分割渲染)
现手机里有一段视频,通过APP给他添加一个水印。iOS提供了在视频上添加layer的接口,添加一个水印还是很方便的(添加水印)。添加完水印有一个渲染过程,在手机这种设备上还是比较慢的,比如:对1分钟的高清视频(960x540)进行渲染需要20秒左右。如何在现有API基础上提高渲染速度,提升用户体验,成了问题。笔者发现两种渲染方法: 先看图,这有一个6秒的视频,我抓了四张关键帧。只在第2,3两张关键帧上添加字幕(一个关键帧代表1.5秒。所以,两个关键帧就代表是3秒时长)
2017-05-25 14:49:40 6434 1
原创 [经验]tableview的contentSize默默自己在变。
项目中遇到一个诡异的问题:tableview的contentSize在滚动的时候自动在变小。这里先说一下项目环境:UIViewController有个tableview,可以通过上拉加载,实现加载更多数据。在一日测试中发现,一直上拉,上拉到第三页的时候。页面反而滚动到了顶部惊讶。上拉加载更多,结果应该是tableview显示底部数据,contentoffset应该是一个比较大的值。现在却弹回去了。看看输出日志
2017-05-15 19:02:51 4382
原创 scrollRectToVisible 无效的两个原因
除了UIScrollView的ContentSize的width或者height是0的原因外,可能还有一个原因就是UITableview的contentInset是负值,比如:self.tableView.contentInset = UIEdgeInsetsMake(-5, 0, 0, 0);删除这个contentInset或者inset是正值,滚动到顶部都可以生效
2017-05-05 11:49:45 3880
翻译 iOS返璞归真,译文系列——UIViewController
UIViewController懒加载他的view。第一次访问视图属性加载或创建视图控制器的视图。不是所有的“will”回调方法都只与“did”回调方法配对
2017-03-16 15:19:20 1927
翻译 iOS返璞归真,译文系列——UIScreen
UIScreen一个uiscreen对象定义了一个基于硬件的显示相关的属性。iOS设备的主屏幕和零个或多个连接的屏幕。一个TVOS装置具有电视连接到设备的主屏幕。使用此类获取连接到设备的每个显示器的屏幕对象。每个屏幕对象定义关联显示的边界矩形和其他有趣的属性,如它的亮度。概要 在iOS 8之前,屏幕的边界矩形总是反映相对于肖像定位屏幕尺寸。旋转设备的景观或倒置的方向并没有改变边界。在
2017-03-16 15:18:33 942
翻译 iOS返璞归真,译文系列——UIWindow
UIWindow UIWindow对象提供app界面的背景,和重要的事件响应交互。Windows本身没有任何可视的表现,但它对view的呈现起着关键作用。每一个view显示在屏幕上,其实是附在一个window上,每个window与应用程序中的其他window无关。应用程序收到的事件,最初被转发到相应的window对象上,然后将这些事件转发到相应的view中。Windows与view
2017-03-16 15:18:04 1303
翻译 iOS返璞归真,译文系列——UIView
UIView UIView 是定义了屏幕上一块矩形区域,并管理着这块区域上内容的UI界面。概要 在运行时,view对象处理矩形区域上所有内容的渲染,并处理交互。UIView类本身提供了基本的填充背景色的能力。更复杂的view可以通过集成UIView或者实现一些必要的drawing方法和event-handing代码。UIKit架构也提供了一系列标准UIView的派生类,
2017-03-16 15:17:40 1323
原创 移动互联网开发团队工作管理经验
● 做事情替别人想一步;仅需一步,不能多也不能少。 ● 别请假,一个人请假影响不止一人。 ● 项目经理不是技术最牛逼的,但一定是最能聚拢人心的。 ● 不要说“技术实现不了”,实现只是时间问题。 ● 产品要强势,要多了解产品逻辑(产品经理拿的工资也不少啊) ● 产品经理、技术、UE、UI和测试都要以产品为中心。 ● 客户端轻量化,重Server。
2017-03-13 15:44:04 1849
原创 UIScrollView频道滑动(授人以鱼,不如授人以渔)
内容型APP(比如新闻,视频,汽车类型),通常采用多个页面(频道)滑动;另外,自动滚动的焦点图用到比较多的。本文简单介绍使用UIScrollView实现上述功能的原理,并附部分代码。无论是频道的滑动,还是焦点图自动滑动,都是基于UIScrollView的特性,viewController 实现UIScrollView的代理,并做一些控制即可。
2017-03-07 17:19:38 1091
原创 iOS识别http是否使用了代理(proxy)
有些APP已经能精确识别:当前WiFi连接失败,是不是由于http代理引起的,已便得到更准确的用户提示,比如:
2017-01-18 16:22:04 9442 1
原创 【经验】清除appIcon的推送数量(badgeNumber),但是在系统通知栏保留推送通知的方法
以下文字转载自:http://www.itdadao.com/articles/c15a380661p0.html一、2017-10-12号更新: iOS 11 此功能依然好用!!!直接对applicationIconBadgeNumber赋值为-1就行了。这行代码仅仅对iOS 11生效。[UIApplication sharedApplication].applicationIconBadgeN
2017-01-18 15:22:53 11370 1
原创 放在下一个runloop执行,保证当前执行正确
正常逻辑:代码行2执行完,执行代码行3.可以达到预期效果。异常逻辑:代码行2是个数据处理(黑盒)。并没有立即返回一个错误返回一个错误, notifyError。但是代码还是行代码行3了。这就是bug了比较low的解决办法有:performSelect或者添加flag等。比较优雅的解决办法是放到下一个runloop执行这样即便代码行2返回错误,但是,需要执行完代码行3才结束当前runloop。所以,在正常逻辑后,再出现异常,一般代码可以处理的。
2017-01-03 10:57:36 2782
原创 使用AVPlayer播放m3u8视频时,实现视频截图
最近需要一个对m3u8文件的截图,但是搜索一段时间后发现方法都类似,但都不成功。经过测试该方法:普通的mp4和mov格式视频可以通过下面的方法获取截图。但是m3u8文件则不行,总提示错误网上查阅资料后,可以使用AVPlayerItemVideoOutput的[AVPlayerItemVideoOutput copyPixelBufferForItemTime:itemTimeForDisplay:]来实现,方法如下:
2016-12-12 00:00:44 34001 2
原创 多个label,可变长情况下使用Masonry
常见的masonry的使用是比较简单,可应付一些常见的布局。但有些布局是动态的,则需要一些masonry和自动布局的技巧,直接上图,如何实现图片中cell的布局。下图中,播放量可变长(必须显示完整);绿底的是“出品人名称”超长显示...;置顶icon必须跟在出品人后面,但不能超过右侧海报图的left
2016-11-24 11:33:21 10093
原创 iOS 项目整体是竖屏,个别页面支持横屏
最近在做一个视频APP,工程整体是竖屏的,如下图,播放器需支持横屏。在转屏的过程遇到很痛苦的问题。[UIApplication sharedApplication].statusBarOrientation = self.UIInterfaceOrientationLandscapeLeft; 未生效设置完后,还是UIInterfaceOrientationPortrait。查阅资料是UITabbarController的方法- (BOOL)shouldAutorotate没有返回NO。这是因为当UIvie
2016-10-24 14:51:33 6090
原创 在多线程情况下,block比delegate有优势。
左边的SHVideoPlayerCaption 代理了播放器的方法叫:messageCallBack(RetObtainSubtitle)ret 如图右边函数。播放器调用messageCallBack是在并发线程。dealloc是在主线程执行。那么,在这样的多线程情况下:如果:执行顺序是1-> 3 -> 2 -> 4。那么第4步则会crash了。Block则可解决这个问题,block会持有了self省的走dealloc了
2016-09-29 19:12:36 1579
原创 HTTPS协议详解(五):HTTPS性能与优化
1、HTTPS性能损耗前文讨论了HTTPS原理与优势:身份验证、信息加密与完整性校验等,且未对TCP和HTTP协议做任何修改。但通过增加新协议以实现更安全的通信必然需要付出代价,HTTPS协议的性能损耗主要体现如下:(1).增加延时分析前面的握手过程,一次完整的握手至少需要两端依次来回两次通信,至少增加延时2* RTT,利用会话缓存从而复用连接,延时也至少1* RTT*。(2).消耗较多的CPU资源
2016-09-08 12:25:17 16680 1
原创 HTTPS协议详解(四):TLS/SSL握手过程
本文大部分内容摘自:http://www.wosign.com/faq/faq2016-0309-04.htm 尊重知识产权,转载注明Wosign----------------------------------专栏导航----------------------------------HTTPS协议详解(一):HTTPS基础知识 HTTPS协议详解(二):TLS/SSL工作原理HTTPS协议...
2016-09-08 12:24:28 88064 14
原创 HTTPS协议详解(三):PKI 体系
本文大部分内容摘自:http://www.wosign.com/faq/faq2016-0309-03.htm 尊重知识产权,转载注明Wosign----------------------------------专栏导航----------------------------------HTTPS协议详解(一):HTTPS基础知识 HTTPS协议详解(二):TLS/SSL工作原理HTTPS协议...
2016-09-08 12:24:12 32342 9
原创 HTTPS协议详解(二):TLS/SSL工作原理
HTTPS协议的主要功能基本都依赖于TLS/SSL协议,本节分析TLS/SSL协议工作原理。 TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。
2016-09-08 12:23:52 32164 3
原创 HTTPS协议详解(一):HTTPS基础知识
HTTPS基础知识:HTTPS (Secure Hypertext Transfer Protocol)安全超文本传输协议,是一个安全通信通道,它基于HTTP开发用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版,是使用TLS/SSL加密的HTTP协议。 HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生。 TLS/SSL全称安全传输
2016-09-08 12:22:55 64808 16
转载 为什么RSA 公钥指数(e=65537)
1. 引言学术界普遍认为绝对不能选用e=3作为RSA公钥指数,就好像说我们再也不能用md5一样。但实际上,md5今天仍然广泛使用。一个密码算法在理论上被攻破,并不等于实践中就一定会有安全风险。比如,md5作为一种密码哈希函数,理论上它必须满足三个性质:(1) 输出的均匀分布性;(2) 抗碰撞攻击;(3) 抗原像攻击。当王小云发现了md5不满足性质(2)之后,理论上md5算法就被攻破——md5将从“
2016-09-07 17:51:26 24974
原创 [经验]iOS app整体是竖屏(横屏),某个页面却支持横竖屏
一个app 整体上是横屏,即info.plist中设置如下图。但是在某个页面需要支持横屏。通常在进入那个页面的时候会crash。2016-08-30 17:38:30.224 Video[991:372909] *** Terminating app due to uncaught exception 'UIApplicationInvalidInterfaceOrientation', re...
2016-08-30 18:02:36 6619 1
原创 【精】客户端(iOS、Android)/Server,APP内部的通信协议,跨平台方案
通常Server通过一些http协议,可以告诉APP需要的展示内容图片,文字。市面上很多新闻APP,点击一个焦点新闻,APP跳到相应的频道或专题。前者是Server——>APP通信,后者是APPAPP内通信。进程间通信 以iOS平台为例,进程间通信IPC,可以通过自定义URL Schema,然后APP实现-(BOOL) application:(UIApplication *) op
2016-08-12 15:06:50 6909
原创 网络安全-【数字证书,证书链】,为什么12306订票要弹信任证书
如何验证一个证书C是不是可信任的呢?需要此证书颁发者B的公钥来验证C证书的合法性。颁发者B的公钥又存在于B的证书中。那么问题来了,又怎么去验证B的证书合法性呢。继续这样追究下去没有个头啊。我们用iOS开发中常见的证书来说明这个追究的过程。 我客户端申请了一个APP证书叫iOS Dev。那么Apple是如何验证这个APP是合法的呢。读者可根据红色的线,从左往右理解:根据iOS Dev的签发者信息,找到签发者是Apple Worldwide Developer Relations Certifi
2016-08-10 10:12:50 2723
原创 【精】Runloop 深入浅出,综合解答
Runloop 概述1、与下面知识相关:系统级:GCD,mach kernel,block,pthread应用层:NSTimer,UIEvent,自动释放池,NSObject(NSDelayedPerforming),NSObject(NSThreadPerformAddition),CADisplayLink,CATransition,CAAnimation,dispatch_get_main_
2016-06-29 16:38:08 8958
原创 iOS Archive 后进入other items,generic XCode Archive
部分内容摘自http://blog.csdn.net/u010069091/article/details/48386865【问题】用XCode Archive后没有列入到以往的app icon下,却进入了other items,切不能提交APP store。Type:generic XCode Archive。如图:【分析】在finder中打开刚刚失败的Archive,发现多了一个文件夹,文件夹
2016-05-26 18:50:54 6505
原创 【技巧】UITableView 在UITableViewStylePlain模型下,取消headerView的黏结性,不浮动
UITableView使用UITableViewStylePlain样式时,section的header与footer会在滚动过程中固定在顶部,这个交互很不错。如果要阻止这个交互,那么办法有四个: 那么如果section中的cell为空,它是不会浮动的;基于这个原理,可以巧妙的将header单独拎出来。如图2:试想分拆后的每一个section,只有第一个带有header,且不会浮动。为了扩展性,将footer也算进去。将原始的section数量乘以3,得到header的section,cel
2016-04-01 10:36:46 6447
原创 获取网络gif时候报错 <Error>: ImageIO: _CGImagePluginInitGIF malformed GIF frame#0
最近在iPad项目中需要获取gif图片,并展示(如何展示gif【点击】)。但是遇到下面的问题。代码如下: NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://photocdn.sohu.com/tvmobilemvms/20160202/14544076957794636.gif"]];//launchContentItem.contentUrl UIImage
2016-03-04 17:51:44 1874
原创 汉字编码之GBK编码(附完整码表)
继续字符编码的学习。今天介绍一下GBK(汉字内码扩展规范),GB 2312 GB18030。引用网友的话可以概括一下:GBK和UTF8的区别:GBK就是在保存你的帖子的时候,一个汉字占用两个字节。。外国人看会出现乱码,此为我中华为自己汉字编码而形成之解决方案。UTF8就是在保存你的帖子的时候,一个汉字占用3个字节。。但是外国人看的话不会乱码,此为西人为了解决多字节字符而形成之解决方案。GBK编码是GB2312编码的超集,向下完全兼容GB2312。GB18030编码向下兼容GBK和GB2312,GB
2016-03-04 12:21:24 824013 7
原创 iOS 后台运行一段时间(不是地图,音乐类型APP)
iOS 后台运行一段时间(不是地图,音乐类型)。iOS 通常是不能在后台运行的,尤其是用户点击锁屏键,APP进入后台,网络立马断开等。如何解决这个问题呢?在APP进入后台,APP怎么争取一些时间来“善后”。代码如下:注:需要定义一个属性 UIBackgroundTaskIdentifier _bgTask;该代码可以自定义后台多长时间自动结束任务。
2016-03-02 16:24:38 2822
原创 iOS 适配固定边距内容拉伸
自从除了iPhone分辨率不再是320x480了。需要开发者适配屏幕,交互设计师通常是要求两边边距不变,内容拉伸。解决办法就是:以iPhone的分辨率为参考,其他屏幕相对拉伸。
2016-02-23 17:32:40 2042
原创 UIImage实现gif文件播放
iOS 中播放gif文件可以简单使用UIImage的这个方法:[UIImage animatedImageWithImages:images duration:duration]
2016-02-23 11:08:01 5587 1
原创 OC 在任意页面,隐藏其他页面的键盘
一、当前viewController隐藏本页面的键盘 很容易。直接调用 [textfield resignFirstResponder]即可。二、目前遇到一个需求 ControllerA出来时候,隐藏当前top 任意view的键盘。那么可以使用这个[[[UIApplication sharedApplication] keyWindow] endEditing:YES];这是有根据的,OC sdk中有一个UIView的类别,就是endEditing。可以参考UITextField
2016-02-22 15:33:32 1951
转载 NSTimer会是准时触发事件吗
NSTimer会是准时触发事件吗 答案是否定的,而且有时候你会发现实际的触发时间跟你想象的差距还比较大。NSTimer不是一个实时系统,因此不管是一次性的还是周期性的timer的实际触发事件的时间可能都会跟我们预想的会有出入。差距的大小跟当前我们程序的执行情况有关系,比如可能程序是多线程的,而你的timer只是添加在某一个线程的runloop的某一种指定的runloopmode中,由于多线程通常都是分时执行的,而且每次执行的mode也可能随着实际情况发生变化。
2016-02-18 10:19:14 1875 1
转载 IOS KVC(键值编码)模式
在IOS的中,没有绝对的私有,包括方法和变量。私有方法通过类实例无法直接访问,但因为有"编译时运行"机制,我们可以通过类似perfromSelectoe的方法来访问私有方法。而IOS中的私有变量通过所谓的KVC模式也是可以访问的。下面特酷吧整理了IOS KVC模式的使用方法。 KVC模式就是key-value coding(键值编码),它的原理是使用字符串标识,间接访问对象属性。关键方法在NSKeyValueCodingprotocol中定义。KVC支持类对象和内建基本数据类型。我们主要使用到它的两
2016-02-18 10:18:03 1817
原创 iOS [[UIDevice currentDevice] systemName]的返回值
无论是iPhone iPad ,还是模拟器上。[[UIDevice currentDevice] systemName]的返回值总是iPhone OS。现在做一个iPad项目,需要自定义UA,该UA包含了systemName的字段。结果H5那边当作是iPhone客户端了。H5上的视频只有声音,没有画面。 后来,H5的同事说。是UA中包含了iPhone字样,他们当做是iPhone客户端来适配。iPhone客户端会一直展示海报图,并吊起全屏播放器。 查阅StackOverflow
2016-01-29 14:39:46 3372
原创 iOS设置自定义UA [NSUserDefaults standardUserDefaults] registerDefaults:@{ @"UserAgent":
有些时候,考虑到兼容性,只对某些webview 实施自定义UA。那么,上面的办法显然不行了。+ (void)initialize在类创建的时候,只执行了一次。也就是所有的webview都带有自定义UA。那么,针对某一个webview实施自定义UA可以这么弄。这几个方法一定要是静态方法,要不然设置UA不生效。
2016-01-28 11:26:30 7636 2
树tree、动态数组dyArray、hashMap、拼图算法
2014-08-15
core-data和sqlite3性能对比demo
2013-06-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人