原文地址:http://blog.csdn.net/lbj05/archive/2011/04/01/6295778.aspx

=====================================

结合个人iPhone开发经历,提几点iPhone UI开发方面的建议。

建议1 尽量使用系统控件

系统控件可以使得用户容易上手,但在iPhone开发中还有很多人习惯使用checkbox而不是UISwitch,使用combobox而不是使用UIPickerView。究其原因可能有两点:一是从其他Windows或者Android系统转到iPhone开发的残留,二是因为跨平台开发中为了减少设计和资源的工作而趋同设计。不过这样的设计往往造成自定义控件的开发投入,质量上也往往无法和系统控件相媲美。

建议2 合理抽象

UI代码是很容易重复写的代码,很多时候就会造成代码效率的错局,让人有一种高效工作的错觉。其实很多代码是完全重复或者结构重复的,通过适当的抽象就可以进行消除和避免。比如在一个应用中,不同地方所需要的内嵌网页浏览器,这些地方往往都有一些共通的行为。比如加载的时候会显示加载进度并在状态栏显示网络状态图标,在加载完毕后隐藏进度和网络状态显示。如果单独在不同Controller中实现不仅不合理,而且容易造成大量代码重复以至于后来的维护噩梦。通过合理抽象,抽取一个基类后就可以封装这块的行为,实现相同逻辑代码的复用。

建议3 优先使用组合

UI中很多部分应该像积木,可以随意拼接组合。比如下图的用户信息显示部分可以由诸如UIImageView,UILabel等几个基本控件拼接而成,而这种显示在一个项目中会通常在多个界面中显示。面对这种的问题,参考建议2后可能就会想着抽象一个基类用来处理用户信息显示相关的逻辑和界面。所有有这需求的界面都可以继承自这个基类。这种抽象是解决了逻辑和界面重复实现的问题,但另一方面却引入了高耦合的继承。如果有些界面因为功能原因更会迫切继承一个其他基类,比如建议2中提到的处理网页加载的基类,由于Objective-C无法支持多重继承,从而被迫进行部分代码的copy&paste。所以在抽象的时候就应该格外珍惜基类的抽象的使用,不断利用Liskov原则进行继承合理性的检查和确认,同时把握“优先使用组合”的原则,通过基本控件的组合制作一些应用相关的组合,比如显示用户信息的,这样其他需要的节目就可以利用组合来复用这部分代码,从而避免继承,也其他更合理的继承保留可能。

建议4 UI和逻辑的分开

这是很重要的一点,iPhone SDK给开发者提供了一个很好的基础来实现UI和逻辑的分开,所以实现的过程中务必遵照一些Apple的指导文档,而避免在UI中揉合着大量逻辑代码。要真这样的话不仅对不起Apple工程师在这方面的努力,更是给自己增加无尽的麻烦。

建议5 充分利用IB。

曾经遇到这样的一个同事,九几年开始做MFC开始,最初也很希望使用STL库,不过在一次项目中发现了STL的内存泄露问题后就开发摒弃STL,以至到现在也不允许自己和属下在项目开发中使用STL。这真是一朝被蛇咬,十年怕井绳。在使用Xcode进行iPhone开发的过程中同样有这样的一些人。他们很早就开始接触和使用IB,但使用过程中发现很多IB的问题和不便,甚至有一些在实际项目中无法忍受,以至于到现在还一直抵触IB。目前,虽不敢说IB已经很完美,但是它对开发效率的提高所起的作用是毋庸置疑的。

建议6 不要低估了Apple工程师

在开发的过程中经常会发现一些比较奇怪的问题,这时候通常就怀疑是不是Apple的bug,于是乎就开始寻找一些特殊处理进行规避并逐渐认定这就是Apple的问题。一旦有过这样的经历后,以后遇到类似的问题就会首选自己发现的那些特殊处理,而逐渐偏离了开发的正道。举个自己亲身经历的例子,一次为了改变UITableViewCell的颜色,开始时直接改变cell的backgroundColor,但发现搞不定,一番搜索后发现改变cell的ContenView的backgroundColor就OK了,不过一旦显示accessoryView就露馅了。于是乎干的彻底点,直接自定义一个UITableViewCell,并用一个UIImageView做背景,现在终于可以“为所欲为”了。不过回想下,怎么简单的一个问题如此大动干戈,真是不值当,所以心里会暗暗骂下Apple的工程师,怎么就不让cell的backgroundColor起作用呢?这么明显的bug!以至于以后的一段时间我就习惯用那“土办法”,而且是屡试不爽。突然有天在stackoverflow上看到一个类似问题的讨论,原来这种问题可以通过重写-tableView:willDisplayCell:forRowAtIndexPath:的委托方法实现。想想之前骂过的话以及走过的弯路,只能感叹自己掌握不深入。有了这样的经历后在遇到类似的问题我会先怀疑使用合理,而不是轻易下结论。

转载于:https://blog.51cto.com/no001/637759

(转) iPhone UI 开发的几点建议相关推荐

  1. iPhone软件开发完美起步

    本文将指导您如何进行iPhone软件开发,把您的创意通过编程变成现实.您将学会如何打造第一个iPhone程序,及其创意实施过程.GUI设计.编程等. 手机上的应用软件开发正在受到越来越多人的关注,软件 ...

  2. iPhone软件开发前需认真考虑问题

    应该如何进行iPhone软件开发,把您的创意通过编程变成现实.您将学会如何打造第一个iPhone程序,及其创意实施过程.GUI设计.编程等 1. 有一个创意,很棒的创意 你怎么知道你的创意好不好呢?首 ...

  3. “12步”揭开iPhone程序开发神秘面纱

    iPhone手机对于各位时尚潮人来说一定不会陌生,而iPhone的风行除了依靠其良好的用户体验,很大一部分原因在于iPhone的App Store中的程序.iPhone的App Store以其独特的经 ...

  4. 12步”教你iPhone程序开发

    iPhone手机对于各位时尚潮人来说一定不会陌生,而iPhone的风行除了依靠其良好的用户体验,很大一部分原因在于iPhone的App Store中的程序.iPhone的App Store以其独特的经 ...

  5. HarmonyOS UI 开发 vp ,fp , px 以及写具体数字的 理解

    HarmonyOS 开发UI 距离和字体使用什么单位 距离使用 vp (virtual pixel) 字体大小使用 fp (font pixel) 详细了解 vp ,fp , px 虚拟像素单位:vp ...

  6. 《深入浅出iPhone/iPad开发(第2版)》——在Xcode中建立你的界面

    本节书摘来自异步社区<深入浅出iPhone/iPad开发(第2版)>一书中的在Xcode中建立你的界面,作者 [美]Dan Pilone , Tracey Pilone,更多章节内容可以访 ...

  7. (转载)如何学好iphone游戏开发

    转自:http://www.cnblogs.com/zilongshanren/archive/2011/09/19/2181558.html 自从发布<如何学习iphone游戏开发>到 ...

  8. 《Iphone SDK3开发快速上手》

    <Iphone SDK3开发快速上手> --iPhone SDK 3 Visual QuickStart Guide 译者:(美)Duncan Campbell   著 刘红伟 等译 IS ...

  9. Android UI开发第三十九篇——Tab界面实现汇总及比较

    Tab布局是iOS的经典布局,Android应用中也有大量应用,前面也写过Android中TAb的实现,<Android UI开发第十八篇--ActivityGroup实现tab功能>.这 ...

最新文章

  1. nojy 105 九的余数
  2. angular使用什么样的样式_Angular 样式使用注意事项
  3. Nignx平滑升级(1.8.0-1.8.1)
  4. 倒腾了一天的笔记-centos 部署jar包
  5. Redis中的可用性保证之Sentinel 原理
  6. C/C++冷门知识点你知道多少呢?
  7. 精准高效估计多人3D姿态,美图北航分布感知式单阶段模型(CVPR 2022)
  8. surfaceflinger类图
  9. creo5.0安装教程(图文详解)
  10. 学生签到系统c代码_学生信息管理系统C代码
  11. 人人商城小程序消息服务器配置,人人商城小程序订阅消息设置方法绝对好使
  12. 最新免费wap网址大全
  13. python arduino小车,搭建ROS小车底盘-第六篇ros_arduino_bridge功能包的使用
  14. android 悬浮按钮点击展开动画,android仿微信浮窗的自动贴边可展开悬浮按钮-博客...
  15. Android kotlin let函数学习
  16. lnmp下配置PHP虚拟主机vhost
  17. J2EE下使用AJAX(四) 隐藏帧 -- 史前的AJAX实现
  18. 服务化系统容量评估和性能保障
  19. 七、vertical-align属性、透明度属性及兼容、ps常用工具、常见的图片格式、项目规范、命名参考、iconfont的使用...
  20. python画笔速度调为最高_【python入门系类课程 第三课 神奇的画笔】

热门文章

  1. 基于SPI的数据报过滤原理与实现
  2. 织梦点击数或者其他数值过【千】过【万】过【亿】的写法
  3. kuangbin带我飞QAQ DLX之一脸懵逼
  4. 我的第一个JW项目——网上商城设计说明书(五)
  5. javascript 之数据类型--01
  6. ZOJ 3827 Information Entropy(数学题 牡丹江现场赛)
  7. C#获取文件夹下的所有文件的文件名
  8. 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
  9. 订餐系统之自动确认淘点点订单
  10. 最喜欢的博客书签和站内短信系统