BridgeQ的个人学习博客

学习、记录、分享

思想汇报(一)

2015年8月11日

关于自己

今年从年初以来,个人工作生活变动都比较大,很多次躺在床上都思绪纷涌,总要想上那么一会儿才肯睡去,所以总结出来写出这篇思想汇报。

从工作了三年的国企中走出来,感觉自己仿佛得到了释放,变得更有激情、更富梦想,变得乐于写字和分享,也比以前更愿意认识陌生人。

年初还完成了一件终身大事,同相恋八年的女友结婚,总算对双方父母都有一个交代,也非常感谢妻子的理解和体谅,支持我离开国企去追求自己的理想。

自定义控制器转场动画及下拉菜单的小Demo | AppCoda翻译系列

2015年8月10日

本文翻译总结自AppCoda以下两篇文章:

iOS 7开始,苹果为开发者提供了自定义控制器转场动画相关的API,而实现该功能需要以下三个步骤:

  • 创建一个类作为动画管理器,该类需继承自NSObject并遵守UIViewControllerAnimatedTransitioning协议,我们在这个类中编写我们的动画执行代码。
  • 为目标控制器指定转场动画代理,既可以使用上一步创建的动画管理器对象,也可以指定来源控制器作为这个代理。
  • 实现代理协议中的相应方法,在方法中返回第一步创建的动画管理器对象。

简单模仿iPad版QQ空间界面的小Demo

2015年8月9日

学习iPad开发的第一个小程序,主要学习横竖屏切换时控件frame的更新,以及iPad中modal控制器的样式设置等。

没有太多新知识点,也算是对之前iPhone项目开发的总结回顾吧。

代码思路清晰,注释详尽,适合给新手学习参考。

代码链接地址:WXGSimpleQzoneDemo_iPad

一次关于OC运行时和Method Swizzing的小实践

2015年7月23日

起因

最近练习一个项目,经典的UITabBarController加UINavigationController的组合,茫茫多得页面需要设置一个统一的背景色,起初在每个控制器的viewDidLoad方法中都加上这么一段:

1
self.view.backgroundColor = WXGGlobalBackgroundColor; // 设置全局背景色

可是随着开发的进行,控制器和界面越来越多,每一个控制器都要写这么一句同样的代码让我感觉很烦,于是开始寻找一劳永逸的办法。经旁人指点,这其实跟我们想要黑盒测试一个方法一样,不管控制器的viewDidLoad方法做了什么,最后都给他加上设置背景色的代码就OK了。于是马上想到用OC运行时中的Method Swizzing来搞。

Swift面向协议编程初探 | WWDC 2015学习笔记

2015年7月21日

最近有时间,挑了几个今年WWDC中比较感兴趣的Session视频来学习,今天就抽时间整理一下关于Swift 2.0中一个比较新的概念面向协议编程

相关的Session视频链接如下:

写在前面

面向协议编程是什么?

你可能听过类似的概念:面向对象编程函数式编程泛型编程,再加上苹果今年新提出的面向协议编程,这些统统可以理解为是一种编程范式。所谓编程范式,是隐藏在编程语言背后的思想,代表着语言的作者想要用怎样的方式去解决怎样的问题。不同的编程范式反应在现实世界中,就是不同的编程语言适用于不同的领域和环境,比如在面向对象编程思想中,开发者用对象来描述万事万物并试图用对象来解决所有可能的问题。编程范式都有其各自的偏好和使用限制,所以越来越多的现代编程语言开始支持多范式,使语言自身更强壮也更具适用性。

Effective Objective-C 读书笔记(二) | 理解OC运行时

2015年7月9日

Class 类型对象

OC本身是一种强类型语言,但其运行时功能让它又有了动态语言的特点。OC中对象的类型和对象所执行的方法都是在运行时阶段进行查找并确认的,这种机制被称为动态绑定。想要弄清楚运行时如何能够实现动态绑定机制,首先要了解OC中对象的本质。

OC是C语言的超集,所以OC中面向对象的功能在底层也是使用C语言来实现。我们在OC中使用的对象,通常指的是储存该对象内存地址的一个指针变量(Java中称为引用),因此我们在OC中声明对象时通常使用类型名称加一个*号,稍微了解C语言的人都知道*号代表该变量是一个指针变量。OC中还有一个特殊的类型id,它可以表示通用类型的OC对象,因为它本身就被定义为一种特殊的指针变量,所以不需要在id后面再加一个*号。

1
2
3
4
5
NSString *someString = @"Some String";
id otherString = @"Other String";

[someString count]; // 编译期报错
[otherString count]; // 运行时报错

使用上述两种方式声明对象,在语法意义上其实完全相同,因为对象的具体类型只在运行时才会被确认。唯一的区别在于,如果声明时使用了具体类型信息,编译器会在编译期间查找对象所能执行的方法,找不到就会报错;而id代表通用类型的对象,编译器默认它能够执行任何已存在的方法。

自己模仿的一个侧拉菜单的小Demo

2015年7月6日

学iOS开发也有段时间了,模仿写了一个简单实现侧拉菜单的小demo,供初学者共同学习、练习使用。

项目地址:WXGSlideMenuDemo

实现效果如下:

例子和做法参考了RayWenderlich上的这篇文章,推荐英文好的同学可以多去这里自行学习。

7月7日更新:

  • 修复了一个小bug(手动侧滑显示菜单后没有更改菜单是否显示的状态,导致有时按钮需要点击两次才能显示菜单
  • 之前的Demo是使用storyboard+自动布局实现的,这次重新写了一份使用纯代码+frame的方式实现该功能的Demo,更加用心,代码质量更好,关键知识点已加注释,希望能帮助到更多的初学者。

Building Adaptive UI 搭建自适应界面 | AppCoda翻译系列

2015年6月30日

(本文翻译自AppCoda创建者Simon Ng出版的书籍《iOS开发中级教程》,详见:Intermediate iOS Programming with Swift

起初,iPhone只有一种3.5英寸的屏幕,那时的软件界面很容易搭建,开发者只需要处理两种不同方向上的界面展示(水平和竖直方向)。之后,苹果发布了9.7英寸屏幕的iPad,这个时候的开发者必须为他们的应用创建两个不同的界面(比如创建两个storyboard或者xib文件),一个用来搭建iPhone版的界面,另一个用来搭建iPad版的。

好日子一去不复返!从2014年开始,苹果公司的iPhone和iPad产品线变化很大。随着iPhone 6和iPhone 6 Plus的发布,现在的应用需要适配多种不同屏幕尺寸的设备,主要有如下几种:

  • iPhone 4/4s(3.5英寸)
  • iPhone 5/5c/5s(4英寸)
  • iPhone 6(4.7英寸)
  • iPhone 6 Plus(5.5英寸)
  • iPad / iPad 2 / iPad Air / iPad Air 2(9.7英寸)
  • iPad mini / iPad mini 2 / iPad mini 3(7.9英寸)

UIScrollView新手教程 | AppCoda翻译系列

2015年6月19日

(本文翻译自AppCoda,详见:原文链接:A Beginner’s Guide to UIScrollView

在iOS开发中,滚动视图(UIScrollView)通常用于显示内容尺寸大于屏幕尺寸的视图。滚动视图有以下两个主要作用:

  • 让用户可以通过拖拽手势来观看想看到的内容

  • 让用户可以通过捏合手势来放大或缩小观看的内容

在iOS应用中常见的表格视图(UITableView)就继承自滚动视图,并因此可以通过上下滚动来显示更多的内容。

在本篇教程中,我们将讨论滚动视图的诸多方面内容,主要包括:使用纯代码和可视化编程两种方式来创建一个滚动视图、实现滚动和缩放功能,以及如何嵌套使用滚动视图。

Effective Objective-C 读书笔记(一)

2015年5月16日

OC的消息机制

OC与其他面向对象语言如C++、Java的不同之处在于使用消息机制代替方法调用。

1
2
3
4
5
6
7
// OC
NSObject *obj = [NSObject new];
[obj doSomething];

// Java
Object obj = new Object();
obj.doSomething();

两者关键区别在于:在使用方法调用的语言中,程序运行时所应执行的代码多数情况下在编译时期就已经被确定,只有在多态的情况下才会在运行时查看该调用哪段代码。而在OC中,无论是否多态,程序运行时所应执行的代码都是由运行时环境来决定。所以在OC中,编译器并不关心接收消息的对象是何种类型,所有消息也都在运行时才被处理,也就是OC的动态绑定机制。