在收藏夹里待了好久,当这个周六我躲在家里一口气看完6集的这个时间点,我完完全全进入了另外一个世界。以往这样的感受通常不会留到第二天,这回,我一定要留下点什么。 这是一部我不惜搭上自己全部信用推荐的纪录片。虽然我本来就不是什么权威,但是能看到这篇文章的朋友或多或少算是相信我的。 无论是叙述手法还是视觉效果,台本台词还是BGM原声带,都是文学巨著级、好莱坞电影级的。这是我才疏学浅的二十多年人生阅历中看过的最棒的纪录片,不可能有之一。除此之外,也是最重要的是,它深深地引起了我的共鸣。 我想,99%的人小时候都会被问到一个问题,「你长大想干嘛?」,而99%的人在那个年纪都会异口同声地回答到:「科学家!」。So

事情的起因还是因为项目需求驱动。折腾了两天,由于之前没有UIWebView与JS交互的经历,并且觉得这次在功能上有一定的创造性,特此留下一点文字,方便日后回顾。 我要实现这样一个需求:按照本地的CSS文件展示一串网络获取的带HTML格式的只有body部分的文本,需要自己拼写完整的HTML。除此之外,还需要禁用获取的HTML文本中自带的 < img > 标签自动加载,并把下载图片的操作放在native端来处理,并通过JS将图片在Cache中的地址返回给UIWebview。 之所以要把图片操作放在native端做的好处在于:1、可以进行本地缓存,下次进入这篇文章可以直接从缓存读取,提高响应速度并且节省用户流量。2、可以实现点击图片放大、保存图片到相册等操作。 技术难点也有两个:1、

刚洗完热水澡,等头发干的时间,动笔写下了这篇文章。总结一下大三下的学生生涯,顺便记录一下来北京儿后的一些感受。 时间线拖到6月23号,期末考试结束前一周,我整个人儿被考试折磨得混天暗地,基本那一周,我的社交圈运动排名都是最后一名,而与其相反的,是我的美团外卖订单数。其实从我的Github主页也能发现,我从23号开始的后一周都没有Commit。那一周,我的所有时间都花在了应试+复习上。之所以那么重要,有过大三经历的人都知道,这一学期的考试过与不过、绩点是多少关系到你大四是否需要花钱、花时间报课重修。所以这一学期可以说是只许成功不许失败。我很幸运,我不知道为什么我总是很幸运,通过了所有考试并且拿到了不错的绩点。

在最近做个一个自定义PageControl——KYAnimatedPageControl中,我实现了CALayer的形变动画以及CALayer的弹性动画,效果先过目: 先做个提纲: 第一个分享的主题是“如何让CALayer发生形变”,这个技术在我之前一个项目 ———— KYCuteView 中有涉及,也写了篇简短的实现原理博文。今天再举一个例子。 之前我也做过类似果冻效果的弹性动画,比如这个项目—— KYGooeyMenu。用到的核心技术是CAKeyframeAnimation,然后设置几个不同状态的关键帧,就能初步达到这种弹性效果。但是,毕竟只有几个关键帧,而且是需要手动计算,不精确不说,动画也不够细腻,毕竟你不可能手动创建60个关键帧。所以,今天的第二个主题是

一直在500px上看照片,发照片。以前看它的首页图片展示就只是觉得好看,洋气,也没想过自己在iOS上实现一下。昨天不知怎么的就开始想其中的算法了,现在我把思考的过程在这里贴出来分享一下,如果你有更好的算法欢迎探讨。 最终我做出的效果是这样的: 垂直滚动 水平滚动 算法总体思路 先说一下总体上的思路。既然图片的大小、位置各不一样,我们很自然地会想到需要算出每个item的frame,然后把这些frame赋值给当前item的UICollectionViewLayoutAttributes。 自定义UICollectionViewLayout的关键两步是先后重载下面两个方法: - (void)prepareLayout; 和 - (NSArray *)layoutAttributesForElementsInRect:(CGRect)

写这篇文章的动机来源于最近做的个动画,如上。其中我一开始在处理pan-to-dismiss的图片形变时候遇到了点问题。 首先,这个动画的思路是,以panGesture的transition.y为变量,去实时改变视图的CATransform3D属性。具体的,我们需要同时改变CATransform3DRotate和CATransform3DScale,这样才能在实现绕X轴转动的同时一起做缩放变换。而且,CATransform3DRotate这个属性需要从0增加到1,达到1后立即从1减小到0(因为视图向内旋转之后还需要再转回来)。除此之外,还需要判断transition.y的正负,因为我们需要当transition.y>0的时候,视图下半部分向屏幕内方向转(也就是CATransform3DRotate中x为-1),反之向屏幕外方向转。 OK,

这是自定义转场系列的第四篇。由于具有一定的连续性,我会忽略一些基础,所以如果你是第一次看这个系列,可以先过目之前的几篇 ——— UIViewControllerTransitioning的用法 、实现Keynote中的神奇移动效果、实现通过圆圈放大缩小的转场动画。 老规矩,先端上GIF。 How to work 首先在StoryBoard上拖两个UIViewController。并且在第一个VC上放一个button,使用Action Segue连接到第二个VC。 然后回到代码界面。和以往一样,我们需要创建两个文件:一个用于从第一个VC过渡到第二个VC的动画(如push),另一个这是第二个过渡到第一个VC的动画(如pop)。这里不得不说iOS7中引入的这种解耦合的方式,它的意义在于无论在哪儿需要用到转场动画的地方,

QQ中针对强迫症有个很棒的交互,对于那些暂时不想理会的未读信息气泡,可以直接手指拖拽去掉。 今天我们就来重现一下这个功能。最终用到一个项目中的效果类似这样。 说到实时的形变,我立马想到的还是 CADisplayLink + UIBezierPath 的神奇组合!具体细节可以参考一下我之前的一篇博文。 【2015.6.14更新】由于屏幕刷新频率和手指拖动的速度无法保持一致,故会出现看到尖角的bug。最终我在panGesture 中的UIPanGestureStateChanged中去实时重绘贝塞尔曲线,完美解决! 这个交互中,难点在于如何绘制贝塞尔曲线。而线又是由点组成的。所以最终归根结底我们还是要找个关键点的坐标。一图胜千言。下面,我绘制了一幅分析图,

做过iOS动画的朋友都知道,动画中一大头疼之处就是弹性、形变之类扭曲的效果。iOS7开始,我们开始可以直接使用UiView的渲染动画API实现简单的弹性效果。 + (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:

几天前,我开始新的App的开发了。终于有机会把swift用在实战中了,也学到了之前纯学语法时没有机会获得的知识。 这篇博文中,我就如何使用swift、OC混编做一个介绍。 OC中使用Swift 首先,在工程的 Build Settings 中把 defines module 设为 YES. 然后,把 product module name 设置为项目工程的名字。 最后一步,在你的OC文件中导入 ProjectName-Swift.