以下内容转自 《Leopard轻松编程:帮你节省代码》
目录:
- Core Animation 核心动画
- 视图描绘
- 和快速查看协同工作
- 管理多视图(针对自定义的分页控件等)
- 图片或者视图以iPhoto形式的动画表格进行呈现
- 设置你自己的智能组、播放列表、目录
- 在菜单里加入自定义视图
- 菜单增强
- 打印界面
- 全局类型标志
- 像邮件程序一样使用分栏视图
- 将文档图标显示在标题条内
- 类似iPhoto工具条形式的HUD窗口
- 控制窗口的材质、金属形式,并可以控制绘画位置
- Spaces集成
- “不要再提示我”
- 针对不同窗口和程序的Dock图标,包括徽章和数字
- 准确追踪鼠标
- 更多文本格式
- 布局管理器增强
- Safari 3风格的搜索结果
- 自动链接、引用和内建的图片编辑
- 拼写检查
- 去掉按钮中不需要的图片
- 免费图片和图标
- 通过平铺小图片画复杂图形
- 凹进形式的方框
- 内建提供的色彩渐变支持
- 增强的TableViews 和 OutlineViews
- 源头列表
- iTunes 歌曲商店形式的路径显示
- 内建的图片编辑
- 内建的PDF查看和浏览
- 卸载程序包
- 获取内存和处理器信息
- 更简单的优先级序列
- 显示日期
- 字符串编码
- Core Data更有效的表达式
- 脚本支持
- 和iCal以及其他数据协同工作
- RSS 支持
- Interface Builder
作者:Matt Gemmell
正文:
做为Cocoa的开发者,每一个新版本的Mac OSX的发布,都需要我们花费时间熟悉它们所提供的新的API和机制。在这个熟悉过程中,一个主要的目标是了解操作系统提供的新的控件和功能。这些功能我们在之前的版本中只能自己用代码去实现,而现在系统自身就提供了相应的调用接口。
在过去的几个月里,我一直在使用Leopard。我认为我应该列举出一些新的API,Cocoa应用程序开发人员们会对它们感兴趣。我会分门别类地介绍它们,并会附带一些截图。您可以在留言中加入您所发现的新功能。我会按照AppKit和Fundation发布说明中的顺序去介绍他们,而如果您真的期望关注Leopard的新功能,建议您也去查看这些这些发布说明。
自然,这些新的API对于之前版本的支持方面的确有些问题,但是这并不会影响这些新的功能的实用价值。
Core Animation 核心动画
这是需要介绍下的东西。如果你花一些时间阅读文档,特别注意一下“带层的视图”和“动画代理”这些概念,你可以仅仅通过在Interface Builder中进行一些简单的设置,就做出一些意想不到的事情。另外,你在写代码的过程中,将从前发送消息到yourView(可以是任意view)改成发送消息到[yourView animator],就可以直接做出一些动画特效来。
看一下 NSAnimatablePropertyContainer,你也可以在view中添加自己的动画属性。
视图描绘
当一个视图被隐藏、显示和即将进行描绘的时候,会自动通知你。这些通知你都可以通过创建子类的方式,建立接收方法。这会帮助你在描绘视图的时候做更有效的预先计算和缓存。而且你可以同时直接操作一个视图的所有子视图。
和快速查看协同工作
你可以自己编写快速查看功能的插件,这样快速查看可以直接预览你创建的自定义文档的内容。这和10.4版中允许你创建Spotlight插件进行索引文档一样。
你还可以直接通过调用在QuickLook框架中提供的 QLThumbnailImageCreate()函数,请求快速查看生成的文档预览内容。你可以指定预览数据的大小、类型,甚至可以直接画成一个图标(可以增加阴影、文档翻页等效果)。
管理多视图(针对自定义的分页控件等)
现在有一个新的 NSViewController类,使用这个类你可以管理多个视图并支持视图绑定。这个类可以帮你省去一大堆在用户请求时切换视图的代码。
图片或者视图以iPhoto形式的动画表格进行呈现
用 IKImageBrowserView直接进行调用。在Interface Builder中设置一个,直接开始模拟,你就能看到效果。下面的例子没有使用一行代码(而且是控件默认的属性设置),仅仅是一个nib文件。这个例子可以显示出你桌面的图片,支持多重选择,自动排列,动画效果的拖拽重新排列。
注意, IKImageBrowserView是一个制作好了的控件,使用了新的 NSCollectionView类。之前这个类被称作 NSGridView,现在叫做 NSCollectionView。同时,有一个叫做 PubSub的例子使用了IKImageBrowserView,你可以在 /Developer/Examples/PubSub/NewMusic/ 这个目录里找到这个例子。
设置你自己的智能组、播放列表、目录
你可以使用NSRuleEditor 和 NSPredicateEditor 这两个类,开发我们所熟知的规则编辑界面。
在菜单里加入自定义视图
NSMenuItem现在提供了一个-setView (和-view) 方法供调用。无需使用Carbon直接可以在菜单里增加自定义控件。通过定时器产生的动画效果也可以工作,但是需要注意你使用的循环。(必须是事件跟踪循环模式,因为是在菜单内)
菜单增强
当一个菜单项被打开、关闭、选中以及取消选中时,你将会以通过托管的方式得到通知。
你可以在不同的菜单上设置不同的快捷键,只要他们执行的动作一样。如果快捷键应当触发一个被禁用了的选项,你的应用程序也可以对其进行响应。这项改进可能会帮你省掉一些定制的代码。
打印界面
打印界面有了很大的增强,尤其是对于附属视图的支持上,你的程序现在可以真正地定制需要打印的部分。如果打印支持是你程序里很重要的一部分,那么你需要重新好好看一下NSPrintPanel和NSPageLayout,这两个类增加了非常多的新资料和新的功能。
全局类型标志Uniform Type Identifiers
Leopard现在大大地通过文档结构支持了UTI,包括NSDocument,打开、保存工具窗口、程序信息、NSWorkspace等等。同样支持了拖拽类型、剪贴板数据、服务定制、图片类型和其他类型的支持。如果你准备简化并全局化程序的数据类型,而不想使用很多重复的常量定义,你应该看看这部分说明。
像邮件程序一样使用分栏视图
NSSplitView现在被明显地增强了。仔细阅读API文档,你会发现程序化地折叠、修改分栏厚度和激活区域,甚至指定一个用于拖拽的区域都变得非常简单。而且还修改了一些错误。
将文档图标显示在标题条内
要实现这个功能,你无需通过使用NSDocument体系,现在系统提供了一个新的方法去控制图标显示的形式、是否需要弹出菜单等功能。
类似iPhoto工具条形式的HUD窗口
现在系统支持一种HUD窗口形式,包含在NSPanel当中。这种窗口可以设置为无边框形式,同时显示为半透明黑色背景。直接使用这种窗口,你可以节省很多定制这种类型窗口的代码。
控制窗口的材质、金属形式,并可以控制绘画位置
现在系统提供了检测窗口材质边框厚度的方法。比如,你可以定义窗口最底部的100点应当有材质。这些方法可以帮你简化自定窗口的子类,或者仅仅为了画一个特定背景的窗口而写的额外的视图。
Spaces集成
当你的窗口显示在特定Space虚拟桌面中,或者用户切换了Space时,你可以选择不同的显示方式。基本来说,你可以指定自己的窗口是否需要使用默认的行为(显示在一个虚拟桌面中,保持在这个桌面直到指定其移动),或者一直显示在当前屏幕上,或者在所有的桌面中都一直显示。请参阅 NSWindowCollectionBehaviour以了解更多信息。
“不要再提示我”
在过去,如果你需要将对话框显示成这种样子(通常在对话框底部显示一个单选框,选中后这个提示就不再出现),你需要写不少代码去实现。在Leopard中,NSAlert直接支持这种形式的对话框了。你可以节省很多代码以及制作这类窗口所花费的精力。请参阅 NSAlert中 setShowsSuppressionButton: 和 -setAccessoryView: 方法。
针对不同窗口和程序的Dock图标,包括徽章和数字
系统提供了一个叫做NSDockTile的新类,允许你控制dock上最小化了的窗口和你自己的程序图标。这个类支持添加、取消图标印章,同时可以定制印章上的文字。比如你想在图标中显示进度条或者其他状态,都可以通过这个类进行操作。这样你就节省了大量定制代码,也无需自己在图标上画了。
准确追踪鼠标
和从前提到过的一样,Leopard现在有了一个更好的跟踪鼠标位置的选择:NSTrackingArea 。你可以用它来获得精确的鼠标位置(鼠标进入、退出或者移动),甚至你的程序不在激活状态也可以追踪。
更多文本格式
现在文字系统支持OASIS开放文档格式和ECMA Office开放XML格式,同时支持新版word格式,这样你可以直接在程序中添加导入导出选项,无需撰写其他代码。
布局管理器增强
如果你一直用NSLayoutManager对布局进行管理,你应该了解,现在它支持非连续布局。如果你想花点时间学学如何实现的话,它对你的程序有了很大的性能改善。还包括了一些改善,诸如获取特定字体的基础偏移位置以及显示不可见项目。
Safari 3风格的搜索结果
Safari 3 提供了一个很漂亮的搜索结果视觉效果,在正文中将搜索结果高亮显示为小黄色方框。你也可以提供这种风格的支持,在 NSTextView 中使用 showFindIndicatorForRange:方法,就可以直接拿来用了。拿这个好功能做点好事,可别做坏事:)
自动链接、引用和内建的图片编辑
NSTextView 现在支持这几个功能,还包括链接的鼠标提示。你甚至可以通过检查 NSAttributedString,去获取它是否在指定位置发现一个URL。又帮你省掉很多定制代码。
拼写检查
你也许注意到了Cocoa文字系统中提供的新的语法检查器(绿色下划虚线),你可以直接调用他们。
去掉按钮中不需要的图片
如果你的程序里有自定义的按钮,你大概为这些按钮的不同状态画了很多图片,普通状态、按下状态等等,你还得写很多代码把这些图片捏在一起。Leopard可以帮你省下这些图片,通过 NSImage的 -isTemplate和 NSCell的 -backgroundStyle。请参阅文档,不过基本上:
你可以指定一个图片,告诉Cocoa,这是一个“遮罩”,Cocoa就会帮你将它在不同情况下高亮(有点类似iCal中左下方那些按钮的状态)
你可以告诉NSCell如何显示文本,显示在什么背景:暗色、亮色、凸出的还是凹进的。你可以只画一个图片就能实现Safari里添加书签那种按钮的效果(高亮、非高亮、雕刻、凸出)
这个功能可以明显减少你的程序尺寸和内存占用,还能减少美工预算。请参阅文档,另外注意NSStatusItem也支持这种功能。
免费图片和图标
长久以来我们一直在盗用苹果的图标,现在你可以随便用了。NSImage中的-imageNamed:方法里提供了大量的新标准图片供你使用,这些图片包括Safari书签图标、所有的箭头、齿轮图标、电脑图标、蓝牙和Bonjour Logo、用户图标、信息图标还有很多很多。你程序的尺寸和图标设计预算可以大幅减少了。(别担心,NSButtonCell支持imageScaling参数,这样这些图标可以随意缩放)
如果你想看看这些图标,在Interface Builder中拽进一个NSImageView,用下拉框查看这些图标,都在里面。
通过平铺小图片画复杂图形
Leopard现在提供了两个函数,分别叫做NSDrawThreePartImage() 和 NSDrawNinePartImage()。这两个函数可以让你使用小图片填充进大的图形。这些函数都是分辨率无关的,可以帮你省下二十行以上的自定代码。
凹进形式的方框
NSBox现在支持自定义背景和边框颜色,你还可以自己选择边框宽度和圆角。你又可以扔掉一个自定义的子类控件了。
内建提供的色彩渐变支持
Cocoa开发中所有人都在使用 CTGradient,它很棒。Leopard中,苹果终于提供了NSGradient类。仔细看看这个类提供的方法,可以很好地帮你制作色彩渐变的用户界面。
增强的TableViews 和 OutlineViews
我一直自己建立NSTableView的子类,这样可以让我编辑表格中的内容(比如复选框等),编辑的同时不会选择整行。Leopard提供了这个支持,可以让你选择是否要追踪一个表格的编辑状态。现在系统提供了继承的方法,让我们支持选择控件内容,并且支持拖拽、关联菜单和直接编辑。
如果你需要iTunes或者Finder侧栏效果,你也可以做出来了。现在系统提供了定宽表格列,你可以直接实现这个效果。
源头列表
我们讨论这个问题好几年了,Leopard终于可以让你在 NSTableView 和 NSOutlineView 中制作高亮效果。不用写定制代码,就可以作出i什么什么的软件效果了。
iTunes 歌曲商店形式的路径显示
新提供的NSPathControl (和其中的Cell 与 ComponentCell或者类似的东西)让你可以显示为这种形式,就像iTunes歌曲商店的那种路径。可以显示为弹出菜单,或者类似路径条的样子。你可以在Interface Builder中做做看。
内建的图片编辑
IKImageView (Interface Builder直接提供) 提供给你图片视图,并且自动支持图片编辑功能、预览的切割、选择、移动、脚注和其他功能,完全不用自己编写代码。现在你在处理图片的时候,没理由不提供一个简单的图片编辑功能了。
内建的PDF查看和浏览
PDFView 提供给你PDF文件预览形式的浏览、选择、缩放等支持。新增加的 PDFThumbnailView甚至可以让你列出PDF中的页码。无需编写代码,内建支持。
卸载程序包
NSBundle现在支持卸载,你可以节省下一些内存。
获取内存和处理器信息
NSProcessInfo现在可以通过调用-physicalMemory 告诉你内存容量,无需使用Carbon,你还可以使用-processorCount获取CPU数目,用-activeProcessorCount获取激活的CPU数目。
更简单的优先级序列
看一下 NSOperation 和 NSOperationQueue,这是系统提供的比较简单的多线程支持,应该比你自己写的好。
显示日期
NSDateFormatter 支持更多日期形式。 NSCalendar可以帮你计算时间差,以类似“几周之前”、“几个月前”这种形式显示。
字符串编码
NSString支持了更多的编码,你可以看看Leopard是否帮你节省了自己做编码的时间。
Core Data更有效的表达式
NSExpression现在支持子查询、聚集查询、联合查询、交叉查询和减量查询。你可以节省下不少内存和代码,无需自己编写程序实现了。如果你想写出更快、可定制性更强而且更少代码的程序,那你一定要看看文档里关于Core Data中SQL存储的部分。
脚本支持
Leopard中提供了太多增强的脚本处理功能,无法一一列举。如果你要在程序中使用脚本支持,请阅读Fundation发布说明(从头读到尾)。你可以少写很多代码,而且程序运行更稳定,错误更少。
和iCal以及其他数据协同工作
日历存储框架允许你存取、编辑、更新iCal数据,这些数据包括诸如日历、任务、时间等,而且很容易使用。同时支持对这些数据的过滤和搜索。
RSS 支持
如果你希望处理简单地处理RSS,看一下PubSub框架。这个例子是系统本身提供的。
Interface Builder
看看Interface Builder中提供的很多新对象吧,你会发现很多有趣的东西。包括了自动化相关视图、AppleScript编辑器、可视化创建工具条、视频截取和很多Quartz Composer相关的东西。系统甚至提供了支持捆绑兼容的 NSDictionaryController,让你编辑 NSTableView中 NSDictionary的内容。
系统还提供了API,你可以自己编写IB对象或者工具条,如果你希望为其他开发者做些事情,你可以看一下这部分。你还可以通过编写这些让自己的开发变得更简单。
结语
现在到了该拿这些东西做点事情的时候了,我想你会希望自己试试看的。花点时间看看Xcode和Interface Builder,这些最新提供的东西会帮助你未来的开发节省很多时间。原文地址:http://mattgemmell.com/2007/10/28/get-rid-of-your-code-with-leopard