ios

A collection of 9 posts
swift

Swift 3

Swift 3 正式发布已经 3 周了,大家 Swift 项目的代码迁移做的怎么样?Glow Baby 项目我花了近 3 天时间,12956 行增改,9817 行删减,360 个文件。迁移的过程是痛苦的,心很累,Xcode 8 的迁移工具也没有让我轻松多少。 不过待迁移完毕后,Swift 3 读起来、写起来都更舒服。Swift 1 确立了语言的基线:安全、快速、现代。Swift 2 展现了 Swift 应该是什么,未来怎么走:面向协议的编程、开源。而 Swift 3 更多是清扫和规范:新的 API 设计简洁干净,
  • 顾 鹏
    顾 鹏
ios

当 NSDictionary 遇见 nil

Demo project: NSDictionary-NilSafe 问题 相信用 Objective-C 开发 iOS 应用的人对下面的 crash 不会陌生: * *** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[1] * *** setObjectForKey: key cannot be nil * *** setObjectForKey: object cannot be nil Objective-C 里的 NSDictionary 是不支持 nil 作为 key 或者 value 的。但是总会有一些地方会偶然往 NSDictionary 里插入 nil value。在我们的项目开发过程中,
  • Allen
    Allen
Service Oriented 的 iOS 应用架构
ios

Service Oriented 的 iOS 应用架构

Intro 前不久我们上线了一款新的 App - Glow Baby,App 针对 0 - 12 个月大的新生宝宝,提供爸爸妈妈全面、健康、科学的育儿知识,帮助记录宝宝成长的点点滴滴。在 Glow Baby 的开发中,我们也做了一些新的尝试 - 使用 Swift 开发,并基于 Swift 的语言特点设计了新的 iOS App 架构。 除了 Community 这部分的代码是作为一个私有的 Repo 引入,Glow Baby 基本是 100% Swift 代码。Glow Baby iOS 团队都是第一次接触 Swift,过程中我们踩过很多坑,遇到过很多抓狂的问题。但总体上,
  • 顾 鹏
    顾 鹏
ios

Deferred Deep Linking in iOS

Deep Linking 其实 deep linking 并不是一个新名词,在 web 开发领域,区别于指向首页的链接(http://tech.glowing.com/),deep linking 是指向具体内容页的链接(http://tech.glowing.com/cn/advices-to-junior-developers/)。在移动开发领域,deep linking 则是指 mobile app 在 handle 特定 URI 的时候可以直接跳转到对应的内容页或触发特定逻辑,而不仅仅是启动 app。比如 dianping://shopinfo?id=1859284,如果你的手机上装了大众点评的话点击这个链接可以直接跳转到商铺页面。这样做的好处主要有: * 在 web 和 app 的切换过程中保留上下文 * App 间带上下文切换(
  • Allen
    Allen
ios

实现iOS 9 Task Switcher动画

升级到iOS 9以后,发现新的task switcher的动画蛮有趣的,于是就动手实现了下,最终效果如下~ 思路 1. 首先我们需要一个横向的scroll view,可以用UICollectionView,也可以自己实现一个。scroll view里每一页都是一张card,一屏5张card: | | |card card card card card| | | 2. 其次,我们需要在scrollViewDidScroll中判断每张card距离中心的距离,根据这个值来调整它的alpha,scale以及x轴的translation。 alpha:右边的card alpha都是1,左边的越靠左alpha越小 scale: 从左往右依次变大 translation:除了中间的card,所有的card都会右偏,而为了让中间card大部分都露出来,右边的card偏移需要比左边大 开工 1. 横向滚动的scroll view 我们可以自己实现一个横向无限滚动的
  • leo
    leo
ios

动态修改UINavigationBar的背景色

这是我们最终想要得到的效果: 思路 在UISrollView的delegate方法 - (void)scrollViewDidScroll:(UIScrollView *)scrollView中根据当前的contentOffset更新navigationBar的backgroundColor即可,so easy~ 开动 那么我们来看看apple为我们提供了哪些API来设置navigationBar的颜色。 首先想到的是最常用的[UINavigationBar appearance] ,我们一般会在AppDelegate中使用它对navigationBar进行统一的设置。但是如果试一下,会发现在scrollViewDidScrollView中调用它并不能动态地改变navigationBar的颜色,原因可以看一下Apple的doc: Use the UIAppearance protocol to get the appearance proxy for a class. You can customize the appearance of inst
  • leo
    leo
ios

GLPubSub - Glow iOS 中的订阅发布模式

前言 我们计划通过 blog 和开源的方式,分享一些我们在开发 Glow 和 Nurture 的过程中积累的开发经验。GLPubSub 作为开源计划的第一步,是一个代码量较少,但很实用的 Category。 GitHub: https://github.com/Glow-Inc/GLPubSub Documentation: http://cocoadocs.org/docsets/GLPubSub Notification 作为发布订阅模式(观察者模式)的一种,在 iOS App 的开发过程中很常见,GLPubSub 是 NSNotificationCenter 的封装,目标是简化 iOS 开发中的发布订阅模式。因为是 NSObject 的 Category,所以可以在任意 NSObject 的子类上使用。 安装 CocoaPods
  • Allen
    Allen
ios

使用CADisplayLink实现果冻效果动画

CADisplayLink是什么 根据Apple的doc: A CADisplayLink object is a timer object that allows your application to synchronize its drawing to the refresh rate of the display. 比起NSTimer,CADisplayLink可以确保系统渲染每一帧的时候我们的方法都被调用,从而保证了动画的流畅性。 Demo 我们希望在animate一个view的时候给它加上果冻效果: 我们会把所有的逻辑都封装到一个BlockView里,在这个view里首先申明一个property: @property (strong, nonatomic) CADisplayLink *displayLink; 在动画开始的时候,初始化displayLink,指定tick方法: - (void)startAnimation { if (self.displayLink == nil) { self.
  • leo
    leo
UIScrollView 实践经验
ios

UIScrollView 实践经验

UIScrollView(包括它的子类 UITableView 和 UICollectionView)是 iOS 开发中最常用也是最有意思的 UI 组件,大部分 App 的核心界面都是基于三者之一或三者的组合实现。UIScrollView 是 UIKit 中为数不多能响应滑动手势的 view,相比自己用 UIPanGestureRecognizer 实现一些基于滑动手势的效果,用 UIScrollView 的优势在于 bounce 和 decelerate 等特性可以让 App 的用户体验与 iOS 系统的用户体验保持一致。本文通过一些实例讲解 UIScrollView 的特性和实际使用中的经验。 UIScrollView 和 Auto Layout iPhone 5 刚出来的时候,大部分不支持横屏的 App 都不需要做太多的适配工作,因为屏幕宽度没有变,table view 多个 cell
  • Allen
    Allen