行书偏旁部首字帖:Ipad开发课程-Charpter3 页面控制和图像视窗 ? 疯狂的老九
来源:百度文库 编辑:九乡新闻网 时间:2024/04/27 19:23:23
Ipad开发课程-Charpter3 页面控制和图像视窗
15Aug
Posted by: 9 in: Iphone程序开发
今天周末,老九可以多多工作一会儿。呵呵,加快大家的学习进度!
页面控制和图像视窗
在靠近iPad的Homescreen按钮附近,有一个发亮的小点表示现在我们所选择的页面。当我们在屏幕上用手指滑动的时候,页面会转换为下一页。下一个小点将会亮起来,原来的小点变成暗点。下面的图中,表示第三页现在被选中。在iPhone SDK中,对这个的控制通过UIPageControl类来实现。
接下来我们将学习在我们自己的程序中实现图像窗口中如何使用页面控制。
实例:页面控制和图像视图
1.创建UsingViews项目,也可以在上个例子中添加项目。添加5个图片
进入Resources文件夹内。
2.双击usingViewsViewController.xib文件,编辑它
3.在View窗口,从Library中拖进两个ImageViews组件。如下图显示,不要让它们完全重叠
4.选择第一个ImageView,打开Attributes Inspector窗口,设置Tag为0.选择第二个ImageView设置Tag值为1.
5.在View窗口,拖进Page Control组件,设置页面显示数为5。让页面控制的那些小点不要被挡住
6.选择背景颜色为黑色,以至于哪些小点能在页面控制的时候能清晰的显示:
7.进入Xcode,在UsingViewsViewController.h中声明三个outlets(引用?)和两个UIImageView对象:
#import
#import
@interface UsingViewsViewController : UIViewController {
IBOutlet UIPageControl *pageControl;
IBOutlet UIImageView *imageView1;
IBOutlet UIImageView *imageView2;
UIImageView *tempImageView, *bgImageView;
}
@property (nonatomic, retain) UIPageControl *pageControl;
@property (nonatomic, retain) UIImageView *imageView1;
@property (nonatomic, retain) UIImageView *imageView2;
@end
8.在Interface Builder,链接3个outlets到View窗口。在File's Owner上点击右键,我们可以看到imageView1,imageView2,和pageControl 的outlets已经被链接上。
9.好重新排列ImageViews组件的位置,让他们互相重叠。
10.开始加入代码,进入Xcode。在UsingViewsViewController.m文件中添加:
#import “UsingViewsViewController.h”
@implementation UsingViewsViewController
@synthesize pageControl;
@synthesize imageView1, imageView2;
- (void)viewDidLoad {
//---initialize the first ImageView to display an image---
[imageView1 setImage:[UIImage imageNamed:@“iMac_old.jpeg”]];
tempImageView = imageView2;
//---make the first ImageView visible and hide the second---
[imageView1 setHidden:NO];
[imageView2 setHidden:YES];
//---add the event handler for the page control---
[pageControl addTarget:self
action:@selector(pageTurning:)
forControlEvents:UIControlEventValueChanged];
[super viewDidLoad];
}
//---when the page control’s value is changed---
- (void) pageTurning: (UIPageControl *) pageController {
//---get the page number you can turning to---
NSInteger nextPage = [pageController currentPage];
switch (nextPage) {
case 0:
[tempImageView setImage:
[UIImage imageNamed:@“iMac_old.jpeg”]];
break;
case 1:
[tempImageView setImage:
[UIImage imageNamed:@“iMac.jpeg”]];
break;
case 2:
[tempImageView setImage:
[UIImage imageNamed:@“Mac8100.jpeg”]];
break;
case 3:
[tempImageView setImage:
[UIImage imageNamed:@“MacPlus.jpeg”]];
break;
case 4:
[tempImageView setImage:
[UIImage imageNamed:@“MacSE.jpeg”]];
break;
default:
break;
}
//---switch the two ImageView views---
if (tempImageView.tag == 0) { //---imageView1---
tempImageView = imageView2;
bgImageView = imageView1;
}
else { //---imageView2---
tempImageView = imageView1;
bgImageView = imageView2;
}
//---animate the two views flipping---
[UIView beginAnimations:@“flipping view” context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
forView:tempImageView
cache:YES];
[tempImageView setHidden:YES];
[UIView commitAnimations];
[UIView beginAnimations:@“flipping view” context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIViewsetAnimationTransition:UIViewAnimationTransitionFlipFromRight
forView:bgImageView
cache:YES];
[bgImageView setHidden:NO];
[UIView commitAnimations];
}
- (void)dealloc {
[pageControl release];
[imageView1 release];
[imageView2 release];
[super dealloc];
}
11.Ctrl+R,当我们点击屏幕下方的页面控制的小点的时候图像将会挨着变换
这个程序的运行分析:
当窗口被载入的时候,一个ImageViews被显示另外一个被隐藏,通过这段代码实现:
//---initialize the first ImageView to display an image---
[imageView1 setImage:[UIImage imageNamed:@“iMac_old.jpeg”]];
tempImageView = imageView2;
//---make the first ImageView visible and hide the second---
[imageView1 setHidden:NO];
[imageView2 setHidden:YES];
用户点击图像控制器的时候是线性控制的。用户点击导致事件被触发并且引用了一个叫pageTurning:的方法:
//---add the event handler for the page control---
[pageControl addTarget:self action:@selector(pageTurning:)
forControlEvents:UIControlEventValueChanged];
在pageTurning:方法中,你通过页面控制(Page Control)的返回值来确定哪个图像被读取:
//---when the page control’s value is changed---
- (void) pageTurning: (UIPageControl *) pageController {
//---get the page number you can turning to---
NSInteger nextPage = [pageController currentPage];
switch (nextPage) {
case 0:
[tempImageView setImage:
[UIImage imageNamed:@“iMac_old.jpeg”]];
break;
case 1:
[tempImageView setImage:
[UIImage imageNamed:@“iMac.jpeg”]];
break;
case 2:
[tempImageView setImage:
[UIImage imageNamed:@“Mac8100.jpeg”]];
break;
case 3:
[tempImageView setImage:
[UIImage imageNamed:@“MacPlus.jpeg”]];
break;
case 4:
[tempImageView setImage:
[UIImage imageNamed:@“MacSE.jpeg”]];
break;
default:
break;
}
//...
}
在动态转换两个ImageViews的时候,用到了UIView类中的多个方法:
//---switch the two ImageView views---
if (tempImageView.tag==0) { //---imageView1---
tempImageView = imageView2;
bgImageView = imageView1;
}
else { //---imageView2---
tempImageView = imageView1;
bgImageView = imageView2;
}
//---animate the two views flipping---
[UIView beginAnimations:@“flipping view” context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
forView:tempImageView
cache:YES];
[tempImageView setHidden:YES];
[UIView commitAnimations];
[UIView beginAnimations:@“flipping view” context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
forView:bgImageView
cache:YES];
[bgImageView setHidden:NO];
[UIView commitAnimations];
特别要指出,这段代码让你可以动态的转换ImageViews
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
forView:tempImageView
cache:YES];
这个程序中还有用到了很多的方法和类,我们后续中还会详细讲解,一个一个来,先使用,后学习,再创造!