《iOS 6核心开发手册(第4版)》——2.4节秘诀:构建按钮

2.4 秘诀:构建按钮
iOS 6核心开发手册(第4版)
当使用UIButtonTypeCustom风格时,将提供所有的按钮艺术。图像的数量依赖于你想要按钮如何工作。对于简单的按钮,可能添加单独一幅背景图像,当按钮被按下时,则改变标签颜色以高亮显示它。

对于切换风格的按钮,可能使用4种图像:用于正常表示中的“禁用”状态、高亮显示(即按下)时的禁用状态,另外两个用于“启用”状态。可以选择并设计交互细节,确保添加局部状态(秘诀2-1中的布尔型isOn实例变量),以将简单的按压式按钮扩展到切换状态。如果给按钮提供正常的图像,并且不指定高亮显示或禁用图像,iOS将自动生成这些变体。

秘诀2-1用于构建一个可以在启用和禁用之间切换的按钮,演示了构建自定义按钮的基本细节。点按该按钮时,它将从绿色(启用)切换成红色(禁用),或者从红色切换成绿色。这允许(非色盲)用户即时分辨出当前的状态。显示的文本强化了状态设置。图2-3(左图)显示了由这个秘诀创建的按钮。

这个秘诀中调用的UIImage大小可变的图像在按钮创建中起着重要的作用。大小可变的图像使得可以创建任意宽度的按钮,把圆形艺术作品转变成菱形按钮。可以指定限定范围(即不应该拉伸的艺术作品)。在这个示例中,限定范围是左、右的宽度均为110像素。如果想要把这个秘诀中使用的按钮宽度从300像素改为220像素,按钮将失去拉伸效果,如图2-3所示(右图)。

图2-3 使用UIImage拉伸动作调整任意的按钮宽度。
设置左边的限定宽度,指定拉伸可以发生在什么位置

按钮可以根据状态指定图像和背景图像。图像设置按钮的实际内容。背景图像可以在图像和标题文本可能出现的地方提供大小可变的背景。秘诀2-1使用了背景图像,允许按钮的内置标题字段浮动在所提供的艺术作品上面。

注意:
可以通过调整图层属性,对视图和按钮的边角进行不同程度的圆整。向项目中添加Quartz Core框架,允许访问视图的图层,其中可以以编程方式设置图层的cornerRadius属性。然后把视图的clipsToBounds属性设置为YES,以实现Apple外观效果。

2.4.1 多行按钮文本
按钮的titleLabel属性允许修改标题属性,比如它的字体和换行模式。在这里,把字体设置为非常大的值(基本上确保需要对文本进行换行以正确显示),并且结合使用单词换行和居中对齐。

button.titleLabel.font = [UIFont boldSystemFontOfSize:36.0f];
[button setTitle:@"Lorem Ipsum Dolor Sit" forState:
      UIControlStateNormal];
button.titleLabel.textAlignment = UITextAlignmentCenter;
button.titleLabel.lineBreakMode = UILineBreakModeWordWrap;

默认情况下,按钮标签将从按钮的一端伸展到另一端。这意味着文本可能比你所想的扩展得更远,也许会超过按钮艺术作品的边缘。为了修正这个问题,可能通过在文本中嵌入换行符(即n),在单词换行模式中强制进行换行。这允许控制在按钮标题的每一行中出现多少文本。

2.4.2 给按钮添加动画式元素
在使用按钮时,可以在它们后面富有创意地分层放置艺术作品。可以使用标准的UIView层次结构执行该操作,确保对任何可能会遮挡按钮的视图禁止用户交互(setUserInteractionEnabled:NO)。图像视图内容会“泄露”给查看者,使你能够给按钮添加生动的动画元素。

秘诀2-1中使用的示例艺术作品是半透明的,允许试验这种方法。用于这个秘诀的示例代码将会添加可以分层放置在按钮和动画后面的可选的蝴蝶艺术作品。

在尝试显示某种状态(比如操作的进度)时,动画式元素特别有用。它们可以告知用户为什么按钮没有做出响应,或者创建不同的按下反应。例如,游戏中的涡轮增强式按钮可能在按下时提供额外的动力。动画式画面可以帮助用户辨别功能中的变化。

把艺术作品和文本与按钮实现分隔开可以在开发中起到其他的作用。在空按钮后面或顶部添加这些元素允许基于想要的部署局部化图形设计和表述,而不必直接重新设计按钮。

2.4.3 给按钮添加额外的状态
秘诀2-1创建了一个具有两种状态的按钮,提供了启用和禁用状态的视觉效果。有时,你可能想利用更容易区分的状态实现按钮。游戏提供了它的最常见的示例。许多开发人员实现了通常会展示4种状态的按钮:锁定级别、解锁但不起作用、解锁且部分起作用、解锁并掌控。

这个秘诀使用一个简单的布尔型开关(isOn实例变量)来存储启用/禁用状态,以及基于此状态来选择使用的艺术作品(在toggleButton:方法中)。可以通过把状态存储为一个整数并提供一个switch语句用于艺术作品选择,把这个示例扩展用于更广泛的艺术作品和按钮状态。

时间: 2024-09-19 10:01:20

《iOS 6核心开发手册(第4版)》——2.4节秘诀:构建按钮的相关文章

《iOS 6核心开发手册(第4版)》——2.12节构建触摸式转盘

2.12 构建触摸式转盘 iOS 6核心开发手册(第4版) 下一个秘诀是创建一个触摸式转盘,就像老款的iPod上使用的触摸式转盘一样.触摸式转盘提供了无限的可滚动输入.用户可以顺时针或者逆时针旋转他们的手指,并且对象的值将相应地增加或减小.每转一圈,转盘(即转动360°)对应于值改变1.0.顺时针的改变为正,逆时针的改变则为负.每次触摸的值会累加起来,也可以对它进行复位(只需把控件的value属性重新设置为0.0即可).这个属性不是UIControl实例的一个标准部分,即使许多控件都会使用该值.

《iOS 6核心开发手册(第4版)》——1.6节秘诀:测试触摸

1.6 秘诀:测试触摸 iOS 6核心开发手册(第4版) 屏幕上用于直接操作界面的大多数视图元素都不是矩形.这使触摸检测变得复杂,因为实际的视图矩形的某些部分可能不对应于实际的触摸点.图1-2显示了实际发生的问题.右边的截屏图显示了界面及其基于触摸的子视图,左边的截屏图则显示了每个子视图的实际视图界限.每个屏幕上的圆形周围的淡灰色区域都落在界限内,但是对这些区域的触摸应该不会"碰到"正在处理的视图. iOS会在整个视图框架内感知用户点按.这包括未绘图的区域(比如图1-2中的实际圆形外面

《iOS 6核心开发手册(第4版)》——1.14节秘诀:实时触摸反馈

1.14 秘诀:实时触摸反馈 iOS 6核心开发手册(第4版) 你曾经需要录制iOS应用程序的演示吗?这总会涉及折中.可以使用架空相机并与影子作斗争,另外用户的手可能会挡住屏幕,或者可以使用像Reflection(http://reflectionapp.com)这样的工具,但是只能看到直接出现在iOS设备屏幕上的内容.这些应用程序录制缺少关于用户触摸和视觉焦点的任何指示. 秘诀1-13提供了一组简单的类(称为TOUCHkit),它们提供了实时的触摸反馈层级,可供演示使用.利用它,可以同时查看正

《iOS 6核心开发手册(第4版)》——1.1节触摸

1.1 触摸 iOS 6核心开发手册(第4版) Cocoa Touch以可能最简单的方式实现直接操作.它把触摸事件发送给正在处理的视图.作为一名iOS开发人员,你将告诉视图如何做出响应.在深入研究姿势和姿势识别器之前,应该在这种底层触摸技术上打下坚实的基础.它提供了所有基于触摸的交互的必要组件. 每个触摸都会传达信息:触摸发生的位置(当前和以前的位置).使用的是触摸的哪个阶段(在桌面应用程序中实质上是鼠标按下.鼠标移动和鼠标抬起,在直接操作世界中对应于手指或触摸按下.移动和抬起).点按计数(例如

《iOS 6核心开发手册(第4版)》——2.16节秘诀:创建可自定义的分页滚动条

2.16 秘诀:创建可自定义的分页滚动条 iOS 6核心开发手册(第4版) 程序清单2-1引入了一个基本的分页滚动条,但是没有给方程式添加任何动态交互.那个示例开始和结束于3个页面.在现实生活中,当可以自由地添加和删除页面时,页面控件要有用得多.秘诀2-10正好用于此任务.它添加了一些按钮,用于为UIScrollView构建和删除视图. 这种方法使用4个(而不是两个)单独的控件来产生图2-10所示的添加和删除交互.4个按钮包括一个使用标准的Contacts Add按钮样式构建的添加按钮,一个模仿

《iOS 6核心开发手册(第4版)》——2.13节秘诀:创建拉式控件

2.13 秘诀:创建拉式控件 iOS 6核心开发手册(第4版) 想象一下屏幕顶部有一根绳子.用力拉它,它会使铃声响起来,或者通过控件的目标-动作机制触发某类事件.例如,它可能展示一个附件视图.开始一个下载,或者开始视频播放.这个秘诀构建一个类似于丝带的控件.在交互时,该控件将会更新客户,它必须开始于"丝带"的顶部,向下拉得足够远以触发一个请求.然后,丝带将再次把自身缠绕起来,为下一次交互做准备. 图2-7显示了这个秘诀构建的控件,在这个示例中它被连接到附件视图的底部.用力拉它将使视图处

《iOS 6核心开发手册(第4版)》——2.15节添加页面指示控件

2.15 添加页面指示控件 iOS 6核心开发手册(第4版) UIPageControl类提供了一行圆点,指示当前显示的是多页视图的哪个项目.SpringBoard主页底部的圆点展示了应用这类控件的一个示例.令人遗憾的是,UIPageControl类在使用时令人失望.它的实例处理起来很笨拙,难以点按,一般会使用户感到恼怒.因此,在使用它时,确保添加替代的导航选项,使得页面控件更多地作为一种指示器,而较少作为一个控件. 图2-9显示了具有3个页面的页面控件.在当前色调明快的页面指示器的左边或右边点

《iOS 6核心开发手册(第4版)》——2.1节UIControl类

2.1 UIControl类 iOS 6核心开发手册(第4版) 在iOS中,控件(control)指为用户界面设计的预建对象库的成员.控件包括按钮和文本框.滑块和选项开关,以及其他Apple提供的对象.控件的作用是把用户交互转换为回调.用户触摸和操纵控件,并以此与应用程序通信. UIControl类位于控件类树的根部.控件是UIView的子类,它们都继承它的所有用于显示和布局的属性.子类添加了一种响应机制,用于增强视图的交互性. 当用户与控件的界面交互时,所有的控件都会实现一些方式来发出消息.控

《iOS 6核心开发手册(第4版)》——2.9节处理选项开关和步进器

2.9 处理选项开关和步进器 iOS 6核心开发手册(第4版) UISwitch对象提供了一个简单的启用/禁用开关,允许用户选择一个布尔值(对于大多数非英语地区,选项开关国际化为1/0).选项开关对象包含单个(可设置的)值属性,称为on.它将返回YES或NO,这取决于控件的当前状态.可以以编程方式更新选项开关的值,其方法是直接更改属性值或者调用setOn:animated:,其中后者提供了一种方式以动画展示所做的更改. 在这个示例中,当选项开关更新时,它会更改视图控制器的标题.IB提供了相对较少

《iOS 6核心开发手册(第4版)》——2.7节外观代理

2.7 外观代理 iOS 6核心开发手册(第4版) 手工对应用程序中的每个按钮.导航栏或滑块进行着色会感到疲倦吗?不要浪费时间进行子类化.代理允许自定义视图类的所有成员(尤其是控件)的默认外观.无须更新实例的属性,而可以对代理应用相同的更新.这些调用将会设置滑块实例的共享外观: [[UISlider appearance] setMinimumTrackTintColor:[UIColor blackColor]]; [[UISlider appearance] setMaximumTrackT