滚动视图 UIScrollerView、分页控件

2023-12-27 11:58

本文主要是介绍滚动视图 UIScrollerView、分页控件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、滚动视图

  1>核心属性

   frame 可视化区域

   contentSize 全部的内容区域大小

   contentOffset  内容偏移量 

内容的偏移量:

  a. (当前正在显示的区域的左顶点,距离全部内容区域左顶点的位置)

  b.此属性既可以通过用户交互动作(拨动),被系统自动修改,也可以由代码来修改,就是会实现内容的移动的效果

  2>滚动视图的应用—— 编写欢迎界面

   a.核心理念:将多张图片,依次,按顺序,算好位置,添加到滚动视图中

   b.滚动视图的其他可配置属性:

bounces   边缘是否可以弹跳

pagingEnable   是否整页滚动

showsHorizontalScrollIndicator  是否显示水平指示器

   c.圆点提示:UIPageControl

step1:创建UIPageControl的实例

step2:设置pageControl的frame

step3:添加当前控制器的view中

   d.如何实现在滚动时,修改PageControl中被选中的小圆点的位置?

为了捕获滚动视图与用户发生了交互,获取到滚动事件,需要设置 当前(图片视图)控制器为滚动视图的代理,那么当滚动视图有任何变化时,都会给代理发消息,于是,当前控制器就能捕获到滚动视图的滚动事件了

step1: 设置滚动视图的delegate属性(数据代理)

step2: 控制器遵守协议

step3: 实现协议中的方法

   e.如何实现在最后一屏中,出现一个可点击的按钮

方案一:在scrollView中添加一个按钮,横向坐标要参照scrollView的左顶点来计算,所以需要知道最后一屏之前越过了几屏

方案二:在最后一屏的 UIImageView中添加一个按钮,这个按钮的frame计算x时,就要以图片的左顶点做参考点

二、分页控件

 

UIPageControl *pageControl = [[UIPageControl alloc]init];//创建pageControl实例

self.pageControl = pageControl;//将该对象作实例赋给当前控制器

pageControl.frame = CGRectMake(0, self.view.bounds.size.height-60, self.view.bounds.size.width, 30);//设置pageControl的frame

[self.view addSubview:pageControl];//添加pageControl到当前控制器的view中

pageControl.numberOfPages = 4;//配置pageControl所指示的页数

pageControl.pageIndicatorTintColor = [UIColor blackColor];//配置提示符的颜色

pageControl.currentPageIndicatorTintColor = [UIColor redColor];//配置选中的提示符的颜色

pageControl.userInteractionEnabled = NO;//关闭圆点与用户的交互功能 

 

 

 

CGFloat yOffset = scrollView.contentOffset.y;//这个属性是用来查看scrollerview当前的偏移量

2..配置滚动视图

UIScrollView *sv = [[UIScrollView alloc]init];//创建滚动视图

sv.delegate = self;//设置当前控制器为滚动视图的代理类,响应滚动视图发出的各种消息

sv.frame = self.view.bounds;//设置滚动视图的可见区域与控制器的view一样大

sv.contentSize = CGSizeMake(4*sv.bounds.size.width, sv.bounds.size.height);//设置滚动视图的内容大小

sv.bounces = NO;//配置滚动视图到达边缘时不弹跳

sv.pagingEnabled = YES;//配置滚动视图整页滚动

sv.showsHorizontalScrollIndicator = NO;//配置滚动视图不显示水平滚动条提示

for (int i=0; i<<span style="font-kerning: none; color: #0435ff">4; i++) {//向滚动视图中添加多个图片子视图        

   NSString *imageName = [NSString stringWithFormat:@"welcome%d.png",i+1];//格式化出图片的名称       

    UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:imageName]]; //创建一个图片视图对象

     CGRect iFrame = CGRectZero;//声明了一个结构体的变量,其中x和y和w和h初始化为0

     iFrame.origin = CGPointMake(i*sv.bounds.size.width, 0);

     iFrame.size = sv.bounds.size;

     imageView.frame = iFrame;//引入第三方变量设置图片视图的位置及大小   

     [sv addSubview:imageView];//将图片视图添加到滚动视图中

  icon.contentMode = UIViewContentModeScaleAspectFill;

icon.clipsToBounds = YES;

    if (i == 3) { 

         [self addEnterButton:imageView]; //向图片视图中添加按钮

     }

}  

 [self.view addSubview:sv];//将滚动视图添加到控制器的view中#pragma mark - UIScrollViewDelegate 协议(利用滚动视图代理协议的某个方法设置分页控件)

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{//任何偏移量改变响应

   int index = round(scrollView.contentOffset.x / self.view.bounds.size.width); //round函数的功能是四舍五入

   self.pageControl.currentPage = index;

}

3.向图片视图中添加按钮的方法

-(void)addEnterButton:(UIImageView *)iv{

    iv.userInteractionEnabled = YES;//开启图片视图的用户交互功能,否则里面的子视图按钮是不能接收用户的交互的

   UIButton *button = [[UIButton alloc]init];//创建按钮实例

    button.frame = CGRectMake((iv.bounds.size.width-150)/2,iv.bounds.size.height*0.6, 150, 40);//设置按钮的frame

    [button setTitle:@"进入应用" forState:UIControlStateNormal];//设置按钮的名称及类型

    button.backgroundColor = [UIColor lightGrayColor]; //设置按钮的背景色

    [iv addSubview:button];//将按钮添加到图片视图中

    [button addTarget:self action:@selector(enterApp:) forControlEvents:UIControlEventTouchUpInside];//为按钮添加事件响应

}

4.点击进入应用按钮后,执行该方法

-(void)enterApp:(UIButton *)button{//由于welcomeVC不再是window的根视图控制器了,所以就会被释放掉,但是使用present方式切换就不会释放掉welcomevc

    MainViewController *mainVC = [[MainViewController alloc]init];

    UIWindow *window = [UIApplication sharedApplication].keyWindow;//获取应用的主window对象,先获取应用程序对象

    window.rootViewController = mainVC;//更换window的根视图控制器为mainVC   

}

 

三.获取scrollerView中的宽高

 

    CGFloat documentWidth = [[webView stringByEvaluating.offsetWidth"] floatValue];

    CGFloat documentHeight = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];

 

    NSLog(@"documentSize = {%f, %f}", documentWidth, documentHeight);

 

 

 

 

 

 

这篇关于滚动视图 UIScrollerView、分页控件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/543051

相关文章

如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)

《如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)》:本文主要介绍如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)问题,具有很好的参考价值,希望对大家有所帮助,如有... 目录先在你打算存放的地方建四个文件夹更改这四个路径就可以修改默认虚拟内存分页js文件的位置接下来从高级-

WinForms中主要控件的详细使用教程

《WinForms中主要控件的详细使用教程》WinForms(WindowsForms)是Microsoft提供的用于构建Windows桌面应用程序的框架,它提供了丰富的控件集合,可以满足各种UI设计... 目录一、基础控件1. Button (按钮)2. Label (标签)3. TextBox (文本框

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动

MyBatis分页插件PageHelper深度解析与实践指南

《MyBatis分页插件PageHelper深度解析与实践指南》在数据库操作中,分页查询是最常见的需求之一,传统的分页方式通常有两种内存分页和SQL分页,MyBatis作为优秀的ORM框架,本身并未提... 目录1. 为什么需要分页插件?2. PageHelper简介3. PageHelper集成与配置3.

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

Mysql中深分页的五种常用方法整理

《Mysql中深分页的五种常用方法整理》在数据量非常大的情况下,深分页查询则变得很常见,这篇文章为大家整理了5个常用的方法,文中的示例代码讲解详细,大家可以根据自己的需求进行选择... 目录方案一:延迟关联 (Deferred Join)方案二:有序唯一键分页 (Cursor-based Paginatio

Spring MVC使用视图解析的问题解读

《SpringMVC使用视图解析的问题解读》:本文主要介绍SpringMVC使用视图解析的问题解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC使用视图解析1. 会使用视图解析的情况2. 不会使用视图解析的情况总结Spring MVC使用视图

mybatis-plus分页无效问题解决

《mybatis-plus分页无效问题解决》本文主要介绍了mybatis-plus分页无效问题解决,原因是配置分页插件的版本问题,旧版本和新版本的MyBatis-Plus需要不同的分页配置,感兴趣的可... 昨天在做一www.chinasem.cn个新项目使用myBATis-plus分页一直失败,后来经过多方

禁止HTML页面滚动的操作方法

《禁止HTML页面滚动的操作方法》:本文主要介绍了三种禁止HTML页面滚动的方法:通过CSS的overflow属性、使用JavaScript的滚动事件监听器以及使用CSS的position:fixed属性,每种方法都有其适用场景和优缺点,详细内容请阅读本文,希望能对你有所帮助... 在前端开发中,禁止htm