`
coolsooner
  • 浏览: 1313447 次
文章分类
社区版块
存档分类
最新评论

再谈UIView

 
阅读更多

接前文《谈Cocoa中的UIView》,本文继续谈UIView。

通常的理解,在一个MVC架构中,View是用来显示内容的,而有关用户交互的逻辑事件则放到Controller里。

——这是个误解。考虑UIButton的例子,当用户按下和放开一个Button时,Button都会有相应的3D动画效果,显示其被按下和放开。这个动作显然是UIButton自带的,而不需要在Controller里写动画代码。

所以,应该把“场景无关”的交互逻辑放在View里。一个按钮,无论是用来登录人人网,还是用来确认是否已满18周岁,它都需要有3D动画效果,所以这个是“场景无关”的。而点击按钮后的响应事件则是场景相关的,需要写在Controller里——如登录成功人人网,确认进入XX网等。

再来谈一个例子说明这个观点:

在一个移动移动应用中,通常需要有缓存在线图片的功能——碰到以前打开过的在线图片,可以从本地disk中找到。

通常希望应用中所有的图片视图都有这个功能,那么它是场景无关的,应该把这个写到View里。

于是我希望有这样一个UIImageView的子类——当给它图片的URL参数,就能方便地读取图片,而不必关心图片来自线上还是缓存,如:


图片是异步读取的。具体实现方式略过不表。

有时还是需要知道图片是否来自线上,则startReadingImage这个方法可以有个布尔返回值。

这其实是本人在上一家公司工作期间最为自得的设计,尽管不算太复杂,但很有用。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics