iOS的视图深入浅出

我前几天买了一堆iOS相关开发的书,花了一天时间,本来看能否学习一些经验类的内容,最后发现还是比较让人失望的。

例如《iOS软件开发揭秘》,上面有这么一句话:掌握iPhone&iPad开发核心技术,让普通开发者创造财富神话!够诱惑人了吧?

这本书我前天买的,如果谁要买,我2块5转让。

再例如《iPad应用开发实践》,这本书我也2块5转让,如果大家觉得我可怜,可以2一把,5块转让。

我这几天一直很烦,决定自己每天写一点内容,和大家一起进步。我不会拿去出版的,你喜欢就看,不喜欢你可以后面留言骂,总之,我要不要你钱。

那就开始吧,我今天的主题主要围绕视图展开。谁让我们iOS震撼我们的是用户体验和交互了!

我今天也不说太多的视图细节,只说些原理的东西,让大家知其所以然,我陆续会在后面的文章中推出视图相关的一系列技巧。

在我所了解的所有用户界面编程中,在技术层面的思路几乎都是框框套框框。

那我们要让框框套框框之后的效果让用户感觉很爽,就需要这些框框具备一定的特性了。最容易想到的有两个:

1、每个框框应该可以透明,可以不透明,也可以半透明,当然你可以在该框框上画任何你想要的图像。

2、每个框框除了可以直接被修饰之外,还可以在其里面搁放其它框框。具体如何搁放,由当前框框自己来组织。

你看前面的两个的特性,我们就会完成很多特别爽的效果,例如第一个特性我们就能给一个导航条绘制自己的背景,你只需重写每个视图的drawRect.至于如何绘,那就是另外一个主题,但至少你明白我的意思了吧?

第二个特性让我们至少闭上眼睛可以明白很多东西。例如一个框框放到另一个框框你至少得告诉我位置吧?是:那就是frame,bounds,center,层什么的。

好,我们更进一步分析,一个视图框架要用户继续接着爽,还应该有什么特性。

我们最常见的就是当最外面的框框被改变大小时,整个框框的变化应该能够跟上,并且不能乱套吧例如我们希望一个工具条一直在窗口的下方,其高度不变,但宽度要随着窗口变;再例如。。。。总之,你想到都应该有吧?那你闭上眼睛想了,当最外面框框被变大小了,他应该怎么调整里面的框框呢?

我理解就几个点:

1、特别武断的调整。二话不说,自己直接根据自己的需要进行调整。例如重些layoutSubviews方法。

2、和自己里面的框框约定一些可能的方式。在自己被调整之后,去一个个询问其里面的框框支持的模式,然后去调整。依次类推往下调整。例如contentMode和contentStretch等。

布局就这个意思,你理解了就行。

我们经常看到iOS上很多特酷的视图切换效果,不错吧?那我们来聊聊这个?

在前面我也说过框框套框框需要层的概念,是这样吧?只是iOS中的层(CALayer,核心动画层)的引入不仅仅只是层的概念,或者说是谁在上谁在下的概念。

这里的层类似对每一个框框(视图)建立了一个投影,如果那个框框要离开,那个框框要插入,都可以不考虑太多框框的东西,直接对投影进行一次投影,然后在一张投影图上进行各种变换矩阵算法即可。明白了吗?大家看过牛皮影嘛?就那个意思?

有时候,我们不是要把一个框框从父亲框框里干掉,我们可以removeFromSuperview,在干掉之前你可以决定如何把这个框框消失,原则说上,基于自由的变换函数,你什么变换都可以搞。

最后当然是要谈视图的事件机制了,这基本上和你见过的事件机制都是一样的,只是触摸,多点触控等概念你要知道。这块希望我有更加通俗的专题来介绍。

事件一般的传递思路是:在应用程序主循环中监听事件队列(写过游戏的人都知道我说什么),如果有事件,将根据事件的特点,滤出根对象开始遍历所有的子对象,然后从最叶子节点开始判断是否监听事件,如果监听,那么是否继续往回传都将交给它来决定。

这是我说的视图级别的事件传递j机制啊。其它的我们再聊。

http://hi.baidu.com/janins/blog/item/8bd1cfe832c01f3e63d09f64.html

你可能感兴趣的:(ios,编程,框架,算法,ipad,出版)