本文只用作技术交流,切莫干出格的事情,请使用者不忘初心。 事情的起因还是昨天虾神放出了这篇文章,外加上对 Pokemon 的强烈热爱,让我第一次有动力实现一次逆向。准确地说,只是第一次重签名。因为虾神把大部分事情都做完了,留给我们动手的只剩重签名这一步了。然而虽然仅仅只有一步,也让我这个逆向新人整整折腾了 5 个小时。不过收获嘛也不小,补了之前漏下的证书的那些事而且也入门一点逆向。 一. 重签名 .dylib 首先,我们 clone 好虾神的项目。你会看到这样的目录结构:
最近工作陆续生产了一些方便开发的工具类,尽管最终没被收入使用,但不妨碍个人使用,故特此开一篇博文,也记录一些自己踩的坑。 UIGestureRecognizer+Block 简单来说,你可以这样使用 UIGestureRecognizer: [self.view addGestureRecognizer:[UITapGestureRecognizer gestureRecognizerWithActionBlock:^(id gestureRecognizer) { //... }]]; 不再需要繁琐地使用 selector 反射,也解决了代码分离的问题。 实现代码如下: static const int target_
很惭愧,标题很浮夸,其实就是消息转发啦。想这个标题想了很久,本想着取个形象生动有意思的标题,不想水平不够,于是就搞了这么个奇怪的名字出来。但今天这篇博客的确有那么点一箭双雕的意思。 摆事实,讲道理。我们先看这么一个场景。我正在写一个自定义的 TableView 滚动条,可以实时显示当前 Cell 的编号,比原生的黑条更具可视性。 实现原理也很简单,KVO 监听 contentOffset 然后根据 public func indexPathForRowAtPoint(
昨天遇到了一个棘手的问题,我发现我的 App (iOS 9.2/iPhone 5s/Swift/CocoaPods)启动巨慢,通过 device log 一看,我的天呐!7.9s? Apr 2 21:33:27 Kittens-iPhone5S Cosmos[309]
首先明确几个函数: 输入一个 NSQualityOfService qos ,输出一个 YYDispatchContext 输入当前的 context,输出一个队列 dispatch_queue_t 输入 NSQualityOfService,输出 qos_class_t 输入 NSQualityOfService,输出 dispatch_queue_priority_t 输入原始信息
本文摘录自 A GUIDE TO IOS ANIMATION,中文名:《Kitten 的 iOS 动画学习手册》。这是一本非常有趣地介绍 iOS 动画的交互式电子书,提供生动的可交互式元素、视频以及精心制作的配图,让你在前所未有的阅读体验中学到干货。购买方式请看我的 置顶微博 。 这是本章的第二个 demo,下面这个案例中,我把线条动画和数学知识结合在了一起。通过这个案例,可以很好地向你展示如何自己归纳出一个数学公式,并把它用到一个自定义动画中。
这次的主题的 Runtime ,对于很多人来说,习惯了面向对象的编程语言之后再接触 C 语言一开始是拒绝的。但是当你真的用起来了,你会上瘾,因为这彻彻底底地满足了极客们的折腾心理,用代码操控一切的心理。 就拿我做大象公会的例子来说(对了,这是我在 Smartisan 的第一个项目,也是独立开发的一款App),你知道 Smartisan 一贯的软件设计风格都是拟物化的,真实模拟着现实世界的自然规律。大到一个动画小到一个按钮,无处不体现着这一设计之初就贯彻的理念。然而这对于一个 iOS 工程师来说,不得不说是一个噩耗。
事情的起因还是因为项目需求驱动。折腾了两天,由于之前没有UIWebView与JS交互的经历,并且觉得这次在功能上有一定的创造性,特此留下一点文字,方便日后回顾。 我要实现这样一个需求:按照本地的CSS文件展示一串网络获取的带HTML格式的只有body部分的文本,需要自己拼写完整的HTML。除此之外,还需要禁用获取的HTML文本中自带的 < img > 标签自动加载,并把下载图片的操作放在native端来处理,并通过JS将图片在Cache中的地址返回给UIWebview。 之所以要把图片操作放在native端做的好处在于:1、可以进行本地缓存,下次进入这篇文章可以直接从缓存读取,提高响应速度并且节省用户流量。2、可以实现点击图片放大、保存图片到相册等操作。 技术难点也有两个:1、
在最近做个一个自定义PageControl——KYAnimatedPageControl中,我实现了CALayer的形变动画以及CALayer的弹性动画,效果先过目: 先做个提纲: 第一个分享的主题是“如何让CALayer发生形变”,这个技术在我之前一个项目 ———— KYCuteView 中有涉及,也写了篇简短的实现原理博文。今天再举一个例子。 之前我也做过类似果冻效果的弹性动画,比如这个项目—— KYGooeyMenu。用到的核心技术是CAKeyframeAnimation,然后设置几个不同状态的关键帧,就能初步达到这种弹性效果。但是,毕竟只有几个关键帧,而且是需要手动计算,不精确不说,动画也不够细腻,毕竟你不可能手动创建60个关键帧。所以,今天的第二个主题是
一直在500px上看照片,发照片。以前看它的首页图片展示就只是觉得好看,洋气,也没想过自己在iOS上实现一下。昨天不知怎么的就开始想其中的算法了,现在我把思考的过程在这里贴出来分享一下,如果你有更好的算法欢迎探讨。 最终我做出的效果是这样的: 垂直滚动 水平滚动 算法总体思路 先说一下总体上的思路。既然图片的大小、位置各不一样,我们很自然地会想到需要算出每个item的frame,然后把这些frame赋值给当前item的UICollectionViewLayoutAttributes。 自定义UICollectionViewLayout的关键两步是先后重载下面两个方法: - (void)prepareLayout; 和 - (NSArray *)layoutAttributesForElementsInRect:(CGRect)