UIScrollView嵌套的尝试

捕手项目的“发现”模块是基于一个UITableView来实现的,顶部是banner列表,有个tabBar作为tablesectionHeader,但是在底部其实是类似一个首页的横向滚动的多页ScrollView结构。

因为之前是用一个UITableView,所以每次切换下面的多页结构的时候,需要刷新UITableView,而且记录每个页面的滚动位置,即便做了数据缓存,其实这种结构是很消耗性能的,而且代码逻辑都混在一起(发现该类的代码已经达到了1050行╮(╯▽╰)╭),bug容易出现;考虑列表可以抽成ChildVC子页面来实现代码的分散,用横向滚动的UIScrollView放入tabBar所对应的ChildVC的tableView,这样就涉及到今天需要讨论的问题:在UIScrollView中嵌套UIScrollView

一种构思:在加载好mainScrollViewsubScrollView后,如果页面向上滚动,先滚动mainScrollView,等tabBar吸顶时候,mainScrollView停止滚动,subScrollView开始滚动。

这样涉及到mainScrollViewsubScrollView 在滚动或者拖拽时,代理方法ScrollViewDidScroll的监听判断问题,这里为了将逻辑代码分散开,我将subScrollView放在子控制器来管理。这样就监听需要两个UIScrollView在滚动的的偏移量ContentOffset,在临界点时候通知对方,这里使用通知NSNotification来实现通知。

结构简图如下:

UIScrollView

阅读更多
Communication-Patterns【译】

原文:Communication Patterns
Issue 7: Foundation · December 2013
By Florian Kugler

每个应用程序由包含多个或多个松散耦合的对象,这些对象常常需要相互通信才能完成应用的任务。在本文中,我们将介绍所有可用的选项,看看它们在苹果框架中如何使用的示例,最后总结何时使用哪种机制的的最佳实践建议。

虽然这个问题是关于Foundation框架,我们将超出Foundation框架中的部分通信机制– KVONotifications,还准备谈谈delegation, blocks, 还有 target-action

当然,在有些情况下,没有明确的答案说应该使用什么样的模式,而将选择归结为个人偏好问题,但也有很多情况(模式使用)是非常清晰明确的。

在本文中,我们经常使用“收件人”和“发件人”这两个术语,我们指的是在通信模式上下文中的意思,最好用几个例子来解释:表视图是发件人,而它的代理是收件人。一个核心数据管理对象上下文是它发布的通知的发件人,而不管它们是如何接收的。滑块是动作消息的发送者,实现这个动作的应答者是接收者。一个含有遵循KVO属性的对象,在变化的是发件人,而对应的观察者是收件人。明白窍门了吗?

阅读更多
我的读书笔记

最近在豆瓣上读了三本书,内容设计设计模式、数据结构和计算机原理,看完后对底层原理理解更深入些,一些心得摘录到豆瓣的日记中,作为备忘。

FrizzleFur的日记

  1. 《大话设计模式》读书笔记
阅读更多
设计模式 Design Patterns

常见设计模式

App开发过程中,随着业务的不断发展,代码和逻辑不断增加,有时候不得不重构以前的代码,好的架构,利于代码的拓展和重构,下面就简单探讨一下iOS中常见的设计模式吧。

设计模式

阅读更多
八段锦,可以这么萌 【转】

八段锦,是一个优秀的中国传统保健功法。八段锦形成于12世纪,后在历代流传中形成许多练法和风格各具特色的流派,它动作简单易行,功效显著。古人把这套动作比喻为“锦”,意为动作舒展优美,如锦缎般优美、柔顺,又因为功法共为八段,每段一个动作,故名为“八段锦”。整套动作柔和连绵,滑利流畅;有松有紧,动静相兼;气机流畅,骨正筋柔。

阅读更多
Charles学习总结

Charles是一个代理服务器,这意味着它位于你的应用程序和计算机的网络连接之间。当查尔斯自动配置您的网络设置时,它改变了您的网络配置以路由所有通过它的流量。这允许查尔斯检查计算机上的所有网络事件。
代理服务器处于强大的地位,但这也意味着滥用的可能性。这就是为什么SSL如此重要:数据加密防止代理服务器和其他中间件窃听敏感信息。
Charles还可以生成自己的自签名证书,您可以在MaciOS设备上安装SSL / TLS加密。由于此证书不是由受信任的证书颁发者颁发的,所以您需要告诉您的设备显式地信任它。一旦安装并受信任,查尔斯将能够解密SSL事件!

阅读更多
iOS 避免循环引用【译】

今天看文章发现一片关于Retain Cycle的老生常谈的问题,但是作者从开发常见场景的代理和Block分析了原因,分析的不错,加深了理解,索性小译一下,加上了一些自己的注解。欢迎转载评论,注明原文地址即可~

Avoid Strong Reference Cycles

随着ARC的引入,内存管理变得更容易了。然而,即使您不必担心何时保留和释放,但仍然有一些规则需要您知道,以避免内存问题。在这篇文章中,我们将讨论强引用循环。

什么是一个强引用循环?假设你有两个对象,对象A和对象B。如果对象A于对象B持有强引用,对象B于对象A有强引用,那么就形成了一个强引用循环。我们将讨论两种非常常见,需要注意循环引用的场景:Block和Delegate。

1
2
A->B: strong reference
B->A: strong reference
阅读更多
4点起床

4点起床

就因为没时间,才什么都能办到

只要妳想要,就能夠做得到!
放弃完美主义,要有乱成一团的心理准备。把“非要完美地完成”,改成“做一点是一点”,一切就有新突破。不做,收获是零,做一点就有一点的收获。
花钱买时间。做“自己不能被替代的事”,其他的事情可以交给别人外包。
别让焦虑消灭斗志。控制情绪就是节约时间。斗志就想气球,一旦因为疲惫、失落泄了气,又得花时间鼓起它,如此反复,会浪费大量时间。
勇敢踏出第一步,然后呢,见机行事。无论第一步有多小,都要踏出去,然后,坚持下来。吉田穗波说的坚持并不是日复一日,而是中途停下来很正常,即使没完成进度还要继续前进。
不是因为某件事很难,你才不想做,而是因为你不想做,让这件事变得很难。

阅读更多
Xcode Debugging

变更记录

序号 | 录入时间 | 备注
— | — | — | —
1 | 2017-06-03 | 新建文章
2 | 2018-02-28 | 更新引言
2 | 2018-04-14 | 整理格式

引言

你的代码,或者任何人的代码中总会有bug存在,你可以把调试看做是更好地理解代码的一种方式 —— By Advanced_Apple_Debugging_&_Reverse_Engineering_v0.9.5

The Debugging Process

  1. Reproduce the problem

    if you cannot reproduce the problem, then you (probably) do not understand it.

  2. Gather Debug Information

    Logs, program, state,…
    What is the value of a variable?
    What kind of error?(ex.EXC_BAD_ACCESS)
    What line of code caused the error?
    Which functions or methods led to the error?

  3. Form a Hypothesis

  4. Try a fix

    Maximize the information gained per fix!

阅读更多
如何阅读一本书

读书方法

不会读书 会读书
选书
购书
【对书没有形成意识】
别人推荐什么读什么
没有目的性的读书
被广告和销量排行榜左右
【搜集信息制作购书清单,按清单购买书】
发现并按照自己的需求选书
读书目的很明确
能排除干扰而不是被动选书
有效利用各种信息定制自己需要的书单
读书 【随意读读】
读书没有重点,需要很长时间
读书过程容易变得单调范围
读过以后很难提炼要点
【以记录读书笔记和创造价值的概念读书】
目的明确,速度更快
读的过程做记号,读完做笔记,印象深刻
读完后能够迅速提炼要点
记录 【仅仅是读过】
没有记录回顾
不记得曾经读过
无法回忆内容
【拥有扎实有价值的个人笔记】
提炼书中要点
记录个人感受
对书中价值点印象深刻
以书为媒介丰富思想
活用 【书在书架上】
难以进行参考
书被遗忘在角落
浪费了时间、空间、金钱
【回顾读书笔记】
便于参考
可以脱离原书
通过读书笔记吸取知识便于实践和提升

康奈尔笔记法

阅读更多