[iOS]通过UIScrollView和UIPageControl实现滑动切换的效果

UIPageControl是自带的控件,可以查看官方文档,下载官方示例学习。

如果对Xcode自带的文档不熟悉可以参见:苹果Xcode帮助文档阅读指南

接下来是我学习笔记,使用Storyboard实现滑动切换的效果。

-----------------------------------------------------------------------------

新建一个项目,拖上一个UIScrollView和UIPageControl,并且建立关联:

新建一个ContentViewController,作为页面切换的内容视图:

也就是说,当滑动屏幕切换的时候,其实就是多个ContentViewController在切换。

基本结构是:

在主页面,我们首先初始化一些设置:

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.

    // 初始化page control的内容
    _contentList = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];

    // 一共有多少页
    NSUInteger numberPages = self.contentList.count;

    // 存储所有的controller
    NSMutableArray *controllers = [[NSMutableArray alloc] init];
    for (NSUInteger i = 0; i < numberPages; i++)
    {
		[controllers addObject:[NSNull null]];
    }
    self.viewControllers = controllers;

    // 一个页面的宽度就是scrollview的宽度
    self.myScrollView.pagingEnabled = YES;  // 自动滚动到subview的边界
    self.myScrollView.contentSize =
    CGSizeMake(CGRectGetWidth(self.myScrollView.frame) * numberPages, CGRectGetHeight(self.myScrollView.frame));
    self.myScrollView.showsHorizontalScrollIndicator = NO;
    self.myScrollView.showsVerticalScrollIndicator = NO;
    self.myScrollView.scrollsToTop = NO;
    self.myScrollView.delegate = self;

    _numberOfPages = numberPages;
    _myPageControl.numberOfPages = numberPages;
    _currentPage = 0;

    [self loadScrollViewWithPage:0];
    [self loadScrollViewWithPage:1];

}

接下来,我们需要一个函数,来加载ContentView页面上的元素:

// 加载ScrollView中的不同SubViewController
- (void)loadScrollViewWithPage:(NSUInteger)page
{
    if (page >= self.contentList.count)
        return;

    // replace the placeholder if necessary
    LContentViewController *controller = [self.viewControllers objectAtIndex:page];
    if ((NSNull *)controller == [NSNull null])
    {
        controller = [[LContentViewController alloc] init];
        [self.viewControllers replaceObjectAtIndex:page withObject:controller];
    }

    // add the controller‘s view to the scroll view
    if (controller.view.superview == nil)
    {
        CGRect frame = self.myScrollView.frame;
        frame.origin.x = CGRectGetWidth(frame) * page;
        frame.origin.y = 0;
        controller.view.frame = frame;
        [controller setLabel:[_contentList objectAtIndex:page]];
        [self.myScrollView addSubview:controller.view];
    }
}

然后先来处理一下PageControl的切换事件:

- (void)gotoPage:(BOOL)animated
{
    NSInteger page = self.myPageControl.currentPage;

    // load the visible page and the page on either side of it (to avoid flashes when the user starts scrolling)
    [self loadScrollViewWithPage:page - 1];
    [self loadScrollViewWithPage:page];
    [self loadScrollViewWithPage:page + 1];

	// update the scroll view to the appropriate page
    CGRect bounds = self.myScrollView.bounds;
    bounds.origin.x = CGRectGetWidth(bounds) * page;
    bounds.origin.y = 0;
    [self.myScrollView scrollRectToVisible:bounds animated:animated];
}

// page control 选项修改监听
- (IBAction)changePage:(id)sender
{
    [self gotoPage:YES];    // YES = animate
}

滑动ScrollView的事件监听:

// 滑动结束的事件监听
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    // switch the indicator when more than 50% of the previous/next page is visible
    CGFloat pageWidth = CGRectGetWidth(self.myScrollView.frame);
    NSUInteger page = floor((self.myScrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
    self.myPageControl.currentPage = page;
    NSLog(@"当前页面 = %d",page);
    // a possible optimization would be to unload the views+controllers which are no longer visible

    [self loadScrollViewWithPage:page - 1];
    [self loadScrollViewWithPage:page];
    [self loadScrollViewWithPage:page + 1];
}

[iOS]通过UIScrollView和UIPageControl实现滑动切换的效果

时间: 2024-10-05 04:25:19

[iOS]通过UIScrollView和UIPageControl实现滑动切换的效果的相关文章

iOS开发之多表视图滑动切换示例(仿&quot;头条&quot;客户端)

好长时间没为大家带来iOS开发干货的东西了,今天给大家分享一个头条新闻客户端各个类别进行切换的一个示例.在Demo中对所需的组件进行的简单封装,在封装的组件中使用的是纯代码的形式,如果想要在项目中进行使用,稍微进行修改即可. 废话少说,先介绍一下功能点,下图是整个Demo的功能点,最上面左边的TabBarButtonItem是用来减少条目的,比如下图有三个按钮,点击减号会减少一个条目.右边的为增加一个条目.点击相应的按钮是切换到对应的表视图上,下方红色的是滑动的指示器,同时支持手势滑动.运行具体

IOS 之 UIScrollView,UIPageControl

UIScrollView 可以用于显示多于一个屏幕的内容,超出屏幕范围的内容可以通过滑动进行查看,UIPageControl 类提供一行点来指示当前显示的是多页面视图的哪一页. 下面实现一个简单的图片自动播放器为例说说 UIScrollView 与 UIPageControl类中的一些方法. 注意:下述代码中的 scrollY,kScreenWidth,kScreenHeight,kImgCount 等都是定义好的常量 #define kScreenHeight [UIScreen mainSc

H5手指滑动切换卡片效果

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /&

上下滑动切换页面

http://code4app.com/ios/多方向切换视图/51de7e506803fa916d000001 iOS开发------仿知乎上下滑动切换页面 http://blog.csdn.net/runintolove/article/details/50887197 http://www.docin.com/p-1052279356.html 使用viewpager嵌套实现上下左右滑动切换图片(IOS双向滚动翻页效果相同) 1 关于ViewPager的知识在这就不详细介绍了,有不是很了解

【Android UI】案例03滑动切换效果的实现(ViewPager)

本例使用ViewPager实现滑动切换的效果.本例涉及的ViewPager,为android.support.v4.view.ViewPager.所以需要在android项目中导入android-support-v4.jar. 本例中ViewPager是实现滑动效果的核心部分.对其设置PageChangeListener监听事件,是实现滑动效果的核心思路. [转载使用,请注明出处:http://blog.csdn.net/mahoking] 首先是主界面layout.xml文件,activity

iOS基础——通过案例学知识之LaunchScreen、APPIcon、StatusBar、UIScrollView、UIPageControl

iOS基础--通过案例学知识之LaunchScreen.APPIcon.StatusBar.UIScrollView.UIPageControl 今天要实现的案例效果图 一.LaunchScreen 1.设置程序的LaunchScreen 在项目配置文件中配置启动页,并且在LaunchScreen.storyboard中进行布局 2.设置LaunchScreen时间 //单位:秒 [NSThread sleepForTimeInterval:1.5f]; 二.APPIcon 1.命名规则:iOS

使用UIScrollView和UIPageControl做一个能够用手势来切换图片的效果

利用UIScrollView的滚动效果来实现,先上图: 实现过程是:在viewController里先增加UIScrollView和UIPageControl: -(void) loadView { [super loadView]; UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320,480)]; UIPageControl* pageControl = [[UIPageCont

UIScrollView 和UIPageControl 实现app启动滑动图

一.使用NSUserDefaults 判断滑动图有没有出现过,加载滑动图 NSUserDefaults 简介: NSUserDefaults可以将数据永久的保存在手机中,他是一个单例,用起来很方便,所以很适合用于保存简单的数据和为数据做标记 你可以选择在AppDelegate.m中的didFinishLaunchingWithOptions 方法或者"初始界面"(加载的第一个viewController)的 viewDidLoad 方法中进行判断滑动图是否出现过,写上代码: NSUse

使用UIScrollView和UIPageControl做一个可以用手势来切换图片的效果

利用UIScrollView的滚动效果来实现,先上图: 实现过程是:在viewController里先加入UIScrollView和UIPageControl: -(void) loadView { [super loadView]; UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320,480)]; UIPageControl* pageControl = [[UIPageCont