noark9 的开发小笔记
这里说的视频渲染是指通过 CVPixelBufferRef
获取 CGImageRef
对象在 UI 上进行渲染的过程。
大家都知道视频渲染是一个非常麻烦的过程,一般来说我们会通过将 CVPixelBufferRef
转换为 CIImage
再将 CIImage
对象转换为 CGImageRef
来完成视频的渲染,其中 CIImage
渲染到 CGImageRef
的过程将会需要到 CIContext
的 - render:toBitmap:rowBytes:bounds:format:colorSpace:
方法来实现,但是在实际使用过程中发现,在 iOS 9.0 系统上,使用这个方法渲染视频时会出现内存泄漏的问题(长时间调试发现似乎是系统的问题)于是花了很多时间来找寻如何绕过 CIContext
来进行视频渲染,最终找到了直接内存拷贝进行视频渲染的方法,也是最为快速的方法。
为什么写这个呢,在开发了一段时间的客户端以后,发现在还原设计稿的时候,收到的标注搞总是无法传达出设计师的心意,总需要自己再去丈量设计师给的设计图,另外前段时间,知乎专栏上这篇文章似乎略火做一份让工程师泪流满面的标注,当时看了看,觉得很不错啊,然后发给我司设计师大人们看了,我司设计师跟我说,nonono,工作量略大,我在仔细看看了后觉得确实,一个设计稿需要做三个标注,那是多蛋疼的事情啊-,-但是作为一个不断上进的码农,于是在开发之余不断的思考,决定写个文章告诉设计师,我是怎么想的,按照我的想法来标注-,-目的是从根本上解决这个问题。。。。。。
那么我们的目的就是:
在小伙伴们都玩了好久RAC之后,我才开始研究如何使用-,-思来想去发现这东西看上去似乎很复杂,用起来确实也很复杂,里面涉及到很多概念是常规iOS或是OS X开发过程中完全没用到过的,同时RAC也将函数式编程的思想带到了iOS开发中。
在查找资料的过程中,找到了一个网站ReactiveCocoa Design Patterns这个网站里面对RAC的一些基础观念进行了比较好的解释,所以为了让自己能更好的学习,就决定翻译翻译,也希望能对大家学习过程中有帮助。
本文翻译自ReactiveCocoa Design Patterns
注意:下文中,为了方便大家理解,部分单词没有翻译,当然如果需要知道中文的,如下:
Signal是构造FRP程序最基础的砖块,一般来说,我们的程序组织一系列的signal,决定这些signal的值从何而来,signal之间如何连接,以及值如何在signal中传递。我们可以认为signal是一个管道,我们的应用程序是一个复杂的管道系统,将事件放入管道系统的输入端,从输出端得到结果。
这篇内容完全是意外啊,起因是酱紫的
某日看见一个Mac的app打折大礼包(bundle)买了以后里面有个神奇的iPxx设备管理的app,叫iMazing,然后用iMazing尝试了下,发现居然可以看app里面的数据,然后出于手闲好奇的心里-,-我就点开了大TX的扣扣看了一眼,于是就产生了下面的一系列意外发现
iMazing长下面酱紫,用起来赶脚还是很不错的啊,于是我顺手点开了扣扣,出于学习的目的,研究了一下
发现iMazing很强力啊,把整个app和数据都dump出来了,以及这次我们要讲的主角,消息记录,嘛大企鹅的消息记录在别的平台上似乎都是加密过的,iOS上却没有加密,这让人有点意外,不过估计也比较相信水果公司的沙盒是很安全的吧,不过这也给我们点机会一窥企鹅里面到底是啥样的。
另外本文完全自我yy的,水平有限写的不好的地方大家拍砖即可
很多人不喜欢goto,认为goto为代码结构带来了很多灾难,但是用的好的话,其实goto同样能够优雅的解决很多问题,比如下面说的这个
这个算是最近看的代码之髓第六章的一个读书扩展了,对于C里面,如何更好的处理错误,其中提到了一点Linux内核编码风格里面提到可以用goto来更好的集中处理错误,减少冗余代码,详情可以看Linux内核编码风格中的第七章——集中处理函数的退出
第七章原文大意是这么说的
尽管有的人不喜欢goto,但是呢其实编译器里面还是一直用着无条件跳转这一和goto等价的东西。在一个函数里面如果有多个地方都需要进行清理和提交任务的时候,goto的好处就显现出来了。
冒个泡,体现下存在感,哈哈哈哈,最近发现iOS自带的动画效果总是困扰着我-,-比如,iOS7上返回时,会自动加一个半透明的层做渐变感,比如返回的时候,总是整个view一起动的,动画过程中,我需要隐藏和显示导航栏等这些要求,原生的动画总是无法满足这些小小的要求!(ノ`□´)ノ⌒┻┻
经过数小时上网找资料,发现大神们要不就是一笔带过,要不就是懒得讲很多,于是,发现还是自己写比较科学啊┓( ̄∇ ̄)┏,下面我们来尝试做一个
制作方法还是按照古法炮制,继承一个NSNavigationController
然后重写其中的pop和push方法以达到我们的目的,在我的理解,导航控件他的pop和push方法,实现了在他自己的控制器栈中实现不断的出栈和入栈的操作,然后播放一小段动画,愉悦下大家,那么我们要做的事情就是去掉原来的动画,做pop,push的动作,然后播放我们自己的动画
做动画之前,必须要有的一个东西就是,我们要让什么东西来动呢,那导航上必然是两个ViewController中的View的内容喽,那么我们就需要对UIView
进行扩充,实现获取View中的内容。
最近略忙啊。。。于是blog稍微暂停了一段时间啊,好吧今天来个短小精干的,说说最近遇到的一个问题了,其实可能大家都遇到过了,一个比较普通的问题,在使用Resizable Image和Stretchable Image的时候,出现透明线的问题。
iOS开发过程中啊,我们经常用到的一个东西就是Resizable Image或者叫Stretchable Image的图像,我来粗糙翻译下可以拉伸的图像,用来填充我们的界面,为啥呢,因为一个可以拉升的图像,我们只需要指定需要从那个位置开始拉升,那么我们就能使用一个图片,创造一堆不同大小的控件了。
扯了好多闲,我们来看看到底是啥样的吧,因为,好麻烦不打算开demo了,于是我选择附上so转载图片的连接,并无耻的使用提问者的图片,SO问题原链,这篇原链上,大神们的讨论也解决了这个问题。
虽说是截了别人图片我还是很厚道的加了点标注,重新创造了下,上面本来不应该会有的东西就是那几条跟消息气泡颜色不同的线了。
好久木有出现了,大家放心cocoa drawing还在长线更新,最近搬家了,从美丽的彩云之南搬到了高端大气上档次的深圳。于是中间好多天都没有开电脑,好多天就都没有接着写了,以前一直OS X的,今天换换口味来次iOS。
最近看了一个感觉可能平时大家用的少的东西——Voice Over~就是碰一下屏幕就会说话的东西,神奇吧(魂淡,你就是尽找些没人耍的东西写么XDDD),嗯嗯,很神奇啊,so为啥说用的少呢-,-毕竟为特殊人群考虑的太少了,不过麻花的两个app做的还不错(ps,图形解锁直接废了XDDDDDDD能说这是bug么?),之前说找几个一直没找到合适的应用来看下别人做的效果,昨天不小心点了麻花的应用发现做的效果确实挺不错的。好,接下来我们看看怎么用起来。
平常要是我们用苹果原生的控件的话,那基本上是天生自带Voice Over的,也就是所有的东西都配合的天衣无缝,但是呢,要是某些小按钮啊,神马的,我们没有妥妥的设置好label之类的东西,更甚者用image之类的东西来当按钮的,那就不一定run的好了,那下面我们先讲下怎么处理原生控件的,接着讲下怎么自定义的,再接着讲下一种优化策略,本文一定程度上参考了Accessibility Programming Guide for iOS大家也可以看看这篇Guide了解更多。