《iPhone与iPad开发实战—iOS经典应用剖析》连载四

news/2024/7/20 22:37:28 标签: ios, iphone, ipad, interface, uiview, library
3.3.2 视图翻转动画

点击主视图右下角的 按钮,主视图会翻转到背后视图,在背后视图点击 Done 按钮可以返回到主视图。在 iOS 中这是一种视图跳转的方式,同时还伴有动画效果。在本应用中采用的是,通过一个根控制器(控制其它控制器的控制器) RootViewController ,来控制主视图控制器( MainViewController )和背后视图控制器( FlipsideViewController )。
本应用是通过 MainWindow.xib 文件加载 RootViewController 控制器,然后在 RootViewController 控制器中创建一个 MainViewController FlipsideViewController
双击打开 MainWindow.xib 窗口图 3-25 所示。





3-25 MainWindow.xib窗口
在图 3-26 中双击 RootViewController 打开根控制器设计视图如图 3-26 所示。


3-26 根控制器设计视图
这个根控制器创建的时候没有对应的视图对象,我们需要从对象库中拖拽一个 UIView 对象,拖拽过程如图 3-27 所示。拖拽完成后视图如图 3-28 所示。



3-27拖拽View到根控制器


3-28 拖拽完成后视图
打开对象库(Library)是通过菜单Tools->Library打开。

我们还需要在图 3-28 视图添加一个 按钮,该按钮是一个特殊的按钮, iOS 提供了创建该形式按钮的模板,首先要在对象库中找到 Rounded Rect Button 拖拽到视图的左下角如图 3-29 所示。


3-29 拖拽按钮
这个按钮如何能变成 按钮呢?这需要选中个按钮然后在通过菜单 Tools->Attributes Inspector 打开按钮检查器,如图 3-30 所示,在图 3-30 Type 下拉选项中选择 Info Light ,这样上面的椭圆形按钮就变成 按钮如图 3-31 所示。
  
  3-30属性检查器    3-31 Info Light按钮
在图3-30Type下拉选项中有很多种按钮类型,这是开发iOS定义好的几个模板按钮。这些按钮在iOS都有这特殊的含义,如果不是真正需要一般情况不用轻易使用。就是显示应用信息,一般就是在实用型应用程序中使用。苹果对于这些按钮使用指南和规范。

现在视图翻转的外围工作已经基本完成,我们可以为程序添加代码了,首先添加 RootViewController.h 根控制器 h 文件如“代码清单 3-1 Password/Classes/RootViewController.h ”所示。
【代码清单3-1】 Password/Classes/RootViewController.h
#import <UIKit/UIKit.h>

@class MainViewController;
@class FlipsideViewController;

@interface RootViewController : UIViewController {

IBOutletUIButton *infoButton;
MainViewController*mainViewController;
FlipsideViewController*flipsideViewController;
UINavigationBar*flipsideNavigationBar;
}

@property (nonatomic, retain) UIButton *infoButton;
@property (nonatomic, retain) MainViewController*mainViewController;
@property (nonatomic, retain) UINavigationBar*flipsideNavigationBar;
@property (nonatomic, retain)FlipsideViewController *flipsideViewController;

- (IBAction)toggleView;

@end
h 文件中需要定义成员变量、方法和属性,其中 infoButton 是有关视图中 按钮对应。
除了在程序中为控件定义输出口外,还需在中把在视图控制器或视图中定义的输出口的控件成员变量与nib文件中的控件连接起来,如图3-32所示,infoButton控件的连接过程是按住Control键使用鼠标选中Root View Controller拖动连线到infoButton控件,然后松开Control键选择控件的输出口属性,这是在MainWindow.xibnib文件这样连接。如果是一般的nib如图3-33所示MainView.xib文件,其中的控制器的名字是File’s Owner,因此需要拖动File’s Owner到控件就可以了。一般情况下输出口的控件定义在视图控制器中的,但是在本应用中有些控件是定义在视图中,在这种情况下我们要拖动那个视图对象到控件就可以了,如图3-34所示。



3-32 根控制器和控件输出口连接


3-33 MainView控制器和控件输出口连接


3-34 MainView和控件输出口连接
mainViewController 属性是主视图控制器, flipsideViewController 属性是背后视图控制器, flipsideNavigationBar 是在背后视图的导航栏控件。 toggleView 方法是个 IBAction (动作)方法,说明它是与控件事件连接在一起的,该方法是对应 按钮的点击事件的。
连接IBAction动作事件与输出口方法类似,要用Interface Builder把对于的nib文件打开,Interface Builder中把控件和控制器(或视图)连接起来,但是方向与输出口相反,输出口连线是按住Control键拖动鼠标从控制器(或视图)到控件,而IBAction动作事件是从控件拖到控制器(或视图)。


http://www.niftyadmin.cn/n/1036996.html

相关文章

vue teleport将组件插入对应节点

我们先创建一个vue项目 然后这边为了省事 我直接就用项目开始就会有的组件写代码啦 找到 项目 src下的 components 下的 HelloWorld组件 编写 代码如下 <template><div>我是一个插入节点</div> </template><script> export default { } </s…

线段树分裂与合并

对于动态开点的线段树来说&#xff0c;当有很多棵线段树时&#xff0c;我们可以进行线段树合并&#xff0c;线段树合并经常用于多个点的贡献&#xff0c;合并两棵线段树的复杂度为两棵线段树相同节点的数m*logm。 将y这棵线段树合并到x这棵线段树&#xff0c;对于x没有y有的节点…

vue3 利用 Composition provide 实现祖先组件向后代组件传值

vue2中可以通过 props实现父子组件间传值 而vue3的provide则是进一步强化了这个功能 我们先创建一个vue3项目 然后在src下的components下再创建一个 components文件夹 里面创建一个index.vue文件 然后找到src下的App.vue 编写代码如下 <template><div class"c…

《iPhone与iPad开发实战—iOS经典应用剖析》连载五

RootViewController 的h 文件编写完成我们接着编写RootViewController 的m 文件如“代码清单3-2 Password/Classes/RootViewController.m ”所示。【代码清单3-1】 Password/Classes/RootViewController.m#import "RootViewController.h" #import "MainViewCont…

吉如一线段树

吉如一线段树用于处理区间取min/max&#xff0c;历史最值的问题。 现在有5种操作:区间加&#xff0c;区间取min&#xff0c;查询区间和&#xff0c;查询区间最大值&#xff0c;查询区间历史最大值。 我们先考虑只有区间取min,然后查询区间和与最大值 区间取min我们不好维护区间…

java set集合基础使用及其特点

set在java.util包下 所以我们使用它是要调包的 我们先来看一下他的基本操作 public static void main(String args[]) throws customException {Set<String> set new HashSet<String>();set.add("你好");set.add("可爱的");set.add("小…

《iPhone与iPad开发实战—iOS经典应用剖析》连载六

3.3.3 主视图UI 主视图如图3-36 所示是MainView &#xff08;主视图&#xff09;设计窗口&#xff0c;我们一步一步介绍一下如何实现该视图设计和编程。 图3-36 MainView视图设计窗口主视图中的控件进行了编号&#xff0c;视图中的控件内容见表3-7 所示。表3-7MainView 视图中的…

java LinkedHashSet基本使用及其特点

LinkedHashSet在java.util包下 所以使用它是需要导包的 他继承了hashset 也带有其中一个特性 他的底层数据结构 有两个 一个是哈希 一个是链表 所以 他既能保存数据添加时的顺序 又能保证数据的唯一性 我们先来看一段代码 import java.util.LinkedHashSet;public class tex…