`

iPhone开发多视图技术总结之四:Page Control .

    博客分类:
  • ios
ios 
阅读更多
第一次使用某个App时,一般会有欢迎界面,向右滑动屏幕会出现该App的新增功能或功能介绍或使用帮助相关的界面。通过PageControl可以实现该效果。


实现的功能:通过PageControl,实现多视图切换。


关键词:多视图 PageControl UIPageContrller


1、创建一个Empty Application工程,命名为:MultiView-Navigation,如下图

[img]

[/img]






2、选中工程中的Group MultiView-Tab,然后按住CMD(Windows键)+N,新建视图控制器PageControlViewController,如下图
[img]

[/img]




3、依照上步操作,新建视图控制器WelcomeViewController、FeatureListViewController





4、万事俱备,开始编写代码,首先修改AppDelegate,AppDelegate.h如下:
#import <UIKit/UIKit.h>
#import "PageControlViewController.h"
#import "WelcomeViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) PageControlViewController *pageControlViewController;

@end


AppDelegate.m主要修改didFinishLaunchingWithOptions方法,如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.pageControlViewController = [[PageControlViewController alloc]initWithNibName:@"PageControlViewController" bundle:nil];
    //设置rootViewController
    self.window.rootViewController = pageControlViewController;
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}








5、视图控制器WelcomeViewController、FeatureListViewController仅仅修改了源代码文件,设置了一下背景色,如下:
@implementation WelcomeViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        self.view.backgroundColor = [UIColor redColor];
    }
    return self;
}


@implementation FeatureListViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        self.view.backgroundColor = [UIColor greenColor];
    }
    return self;
}






6、主要工作在PageControlViewController中,PageControlViewController.h如下:
#import <UIKit/UIKit.h>
#import "WelcomeViewController.h"
#import "FeatureListViewController.h"
@interface PageControlViewController : UIViewController<UIScrollViewDelegate>{
    BOOL pageControlUsed;//用于区分是点击PageControll换页还是通过滚动scrollView换页
}

//添加代码
@property (strong, nonatomic) UIPageControl *pageControl;
@property (strong, nonatomic) UIScrollView *scrollView;
@property (strong, nonatomic) WelcomeViewController *welComeViewController;
@property (strong, nonatomic) FeatureListViewController *featureListViewController;

-(void)pageControlChanged:(id)sender;
@end


PageControlViewController.m如下:
#import "PageControlViewController.h"

@interface PageControlViewController ()

@end

@implementation PageControlViewController
@synthesize pageControl;
@synthesize scrollView;
@synthesize welComeViewController;
@synthesize featureListViewController;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
	CGRect frame = [UIScreen mainScreen].applicationFrame;
    int width = frame.size.width;
    int height = frame.size.height;
  
    frame = CGRectMake(0, 0, width, height);
    //初始化scrollView
    scrollView = [[UIScrollView alloc]initWithFrame:frame];
    scrollView.showsVerticalScrollIndicator = NO;
    scrollView.showsHorizontalScrollIndicator = YES;
    scrollView.pagingEnabled = YES;
    scrollView.contentSize = CGSizeMake(width*2, height);//scrollView内存大小
    scrollView.scrollsToTop = NO;
    //设置代理
    scrollView.delegate = self;
    
    
    int pageControlHeight = 50;
    NSLog(@"width=%d,height=%d",width,height);
    //初始化pageControl
    pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(0, height-pageControlHeight, width, pageControlHeight)];
    
    //pageControl设定
    pageControl.numberOfPages = 2; //2页
    pageControl.currentPage = 0;
	pageControl.hidesForSinglePage = NO;
	pageControl.backgroundColor = [UIColor blackColor];
    [pageControl addTarget:self action:@selector(pageControlChanged:) forControlEvents:UIControlEventValueChanged];
    
    //初始化welComeViewController、featureListViewController
    welComeViewController = [[WelcomeViewController alloc]initWithNibName:@"WelcomeViewController" bundle:nil];
    featureListViewController = [[FeatureListViewController alloc]initWithNibName:@"FeatureListViewController" bundle:nil];
    
    //设定welComeViewController的位置
    frame = scrollView.frame;
    frame.origin.y = 0;
    welComeViewController.view.frame = frame;
    
    //设定featureListViewController的位置
    frame.origin.x = frame.size.width;
    featureListViewController.view.frame = frame;
    
    //将welComeViewController、featureListViewController加入到scrollView中
    [scrollView addSubview:welComeViewController.view];
    [scrollView addSubview:featureListViewController.view];
    //scrollView设置为黑色背景
    scrollView.backgroundColor = [UIColor blackColor];
    
    [self.view insertSubview:scrollView atIndex:0];
    //将pageControl的atIndex设置为1,pageControl的view在scrollView的view的上层
    [self.view insertSubview:pageControl atIndex:1];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    pageControl = nil;
    scrollView = nil;
    welComeViewController = nil;
    featureListViewController = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

//点击pageControl上的白色点触发的事件
-(void)pageControlChanged:(id)sender{
    int page = pageControl.currentPage;
    NSLog(@"page=%d",page);
    CGRect frame = scrollView.frame;
    frame.origin.x = frame.size.width*page;
    frame.origin.y = 0;
    [scrollView scrollRectToVisible:frame animated:YES];
    pageControlUsed = YES; //用户通过点击Page Control换页时将其设置为YES
}


#pragma pageControl methods
- (void)scrollViewDidScroll:(UIScrollView *)sender{
    NSLog(@"scrollViewDidScroll...");
    if(pageControlUsed){//如果用户通过点击Page Control换页,则不做处理
        return;
    }
    CGFloat pageWidth = scrollView.frame.size.width;
    NSLog(@"pageWidth=%.2f,scrollView.contentOffset.x=%.2f",pageWidth,scrollView.contentOffset.x);
    NSLog(@"@ %.2f,%2.f",floor(-0.5),floor(-0.6));
    //计算滚到哪页
    int page = floor((scrollView.contentOffset.x-pageWidth/2)/pageWidth)+1;
    pageControl.currentPage = page;
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    pageControlUsed = NO;//滚动结束后将pageControlUsed重置为NO
}


@end





UIPageControl由一系列小圆点组成,每个点代表一页,白色的点代表当前选中的页。


其实现多视图的原理是scrollView的宽度为WelcomeViewController、FeatureListViewController中View的宽度之和,并且WelcomeViewController、FeatureListViewController的View都是作为scrollView的子视图。当第一页被选中时显示WelcomeViewController的view,但是第二页被选中时显示FeatureListViewController的view。



7、编译、运行,效果如下:

[img]

[/img][img]

[/img]
  • 大小: 169.7 KB
  • 大小: 172.4 KB
  • 大小: 67.9 KB
  • 大小: 66.6 KB
分享到:
评论

相关推荐

    iPhone开发【十一】多视图技术总结之三:Page Control

    "iPhone开发【十一】多视图技术总结之三:Page Control"这个主题聚焦于使用UIPageControl来实现滑动浏览多个页面的效果,这在许多应用中常见,如相册、教程或者轮播广告等。UIPageControl是iOS SDK中的一个控件,它...

    iOS 轮播视图 demo

    8. **页面指示器**(Page Control):为了提示用户当前显示的是哪个页面,轮播视图通常会配合页面指示器使用。开发者可以自定义页面指示器的样式和行为。 9. **性能优化**:对于包含大量图片的轮播视图,性能优化是...

    (0136)-iOS/iPhone/iPAD/iPod源代码-滚动视图(ScrollView)-Slider Page Control

    利用ScrollView和PageControl实现翻页/页面切换效果。除了支持手机划动界面来翻页,也可以拖动pagecontrol上面的滑块了预览和切换页面。手指拖动滑块时,滑块到达哪个位置,就会显示对应位置的页面title,当手指松开...

    安卓app开发项目-仿Iphone风格翻页控件,源码及Jar包(源码).zip

    首先,我们需要理解“翻页控件”(Page Flip Control)的概念。在iOS系统中,这种控件常用于电子书阅读器或相册应用,通过模拟真实的纸张翻页动画,让用户感受到更自然、更沉浸式的浏览体验。在安卓平台上实现这样的...

    苹果ios开发100个实例源码.zip

    苹果ios开发100个实例源码; 个人信息输入表(支持表单增删) ...多种page control 风格 多种view视图切换效果 多种样式的圆形动态加载特效 多种样式的无背景图片的按钮效果 多种类型的图表 多种视图切换方式集锦 多

    史上最全的ios开发源码

    滚动视图之Page Scrubber Bar 滚动视图之Parallel View 滚动视图之SBFlowView 滚动视图之Wheel Component 汉字转换为拼音 滑竿类 滑杆(Slider)Circular Slider View 滑杆(Slider)之Range Selector 滑杆...

    iphone页面滑动

    在iOS开发中,实现iPhone页面滑动主要涉及的是UIPageViewController和UIScrollView这两个核心组件。UIPageViewController用于创建一个可以翻页浏览多个视图控制器的容器视图,而UIScrollView则允许用户通过滑动手势...

    wpf仿iphone桌面翻页效果

    每个子页面(Page)都是一个独立的用户控件(UserControl),包含各自的视图和逻辑。 为了实现翻页效果,我们需要利用WPF的动画系统。这通常涉及使用故事板(Storyboard)来控制元素的位置、大小和透明度。我们可以...

    IOS应用源码之【框架】目前为止最为接近iBook的翻页效果(超酷).rar

    3. **Page Control**:UIPageControl通常用于指示多页面视图的当前页和总页数,类似于iBook底部的小圆点。在实现翻页效果时,它能帮助用户跟踪阅读进度。 4. **Gesture Recognizers**:为了实现用户触摸屏幕翻页的...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    The running mechanism of Activity was used cleverly and webiews of main modules were managed through Fragment stacks, in order to control the switch among different modules. (2)Considering cross-...

    IOS 左右滑动菜单

    在iOS开发中,"左右滑动菜单"是一种常见的交互设计,它允许用户通过左右滑动手势在多个视图之间切换,通常用于展示主菜单、设置或者其他功能选项。这种设计模式在许多应用程序中都能看到,例如社交应用、电商应用等...

    iOS_启动页

    这种情况下,可以使用Page Control或自定义动画来实现翻页效果,同时提供一个“跳过”选项,让用户可以选择不看完整个引导流程。 总的来说,iOS的启动页不仅是应用的第一印象,也是提升用户体验的重要环节。理解并...

    ios中轮播图事例Demo

    在iOS开发中,轮播图(也称为无限滚动或滑动视图)是一种常见的用户界面元素,用于展示一系列图片、文字或其他内容,并自动循环播放。本示例是基于Xcode 12的一个iOS轮播图Demo,旨在帮助开发者了解如何在自己的应用...

    XXPageViewController分页控件

    在iOS开发中,分页控件是一种常见的UI元素,常用于展示多个视图或者内容板块,并且允许用户通过滑动屏幕在这些板块之间切换。本篇将详细介绍XXPageViewController的设计原理、实现方式以及如何在项目中集成和自定义...

Global site tag (gtag.js) - Google Analytics