iOS学习——ScrollView图片轮播和同类控件优先级问题

iOS学习——ScrollView的使用和同类控件优先级问题

1. 布置界面

ScrollView的使用非常简单,只有三步
1.1 添加一个scrollview
1.2 向scrollview添加内容
1.3 告诉scrollview中内容的实际大小

首先做第一步,布置界面。
拖拽一个scrollview就可以了
拖拽一个scrollview
就这么简单


2. 添加内容,并告诉scrollview中内容的实际大小

先给scrollview拖线至viewController的.m文件类扩展中

@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;

再要给scrollview设置代理,让代理处理相应的事件、设置相应的数据。设置代理的方法有两种:拖线和代码设置。

拖线:
拖线设置代理

代码设置,在viewDidLoad方法中设置scrollview的代理为控制器本身。

self.scrollView.delegate = self;

注意,把控制器设为代理需要实现相应代理的接口:
实现相应代理的接口

现在开始添加内容,向Images.xcassets放入要用的五张图片素材,因为博主做的5张图是白色背景,为了能看清,只能把控制器背景调成其他颜色。
素材

- (void)viewDidLoad {[super viewDidLoad];// 动态创建UIImageView添加到滚动控件CGFloat imgW = 340;CGFloat imgH = 150;CGFloat imgY = 0;CGFloat imgX;// 加入五张图片for (int i = 0; i < 5; i++) {UIImageView *imgView = [[UIImageView alloc] init];// 计算每张图的x值imgView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d", i + 1]];imgX = i * imgW;imgView.frame = CGRectMake(imgX, imgY, imgW, imgH);[self.scrollView addSubview:imgView];}// 设置滚动控件内容大小self.scrollView.contentSize = CGSizeMake(5 * self.scrollView.frame.size.width, 150);
}

解释为什么要计算每张图片的x轴:
图片实际上是这样摆放的:
这里写图片描述
橘色的是scrollView,每张图片和scrollView长宽一样大,所以只能看到一张图片,五张图片并排放置,这样滚动scrollView时候就能浏览后面的图片,实现滚动效果。

如果不希望有滚动指示器,就是滚动条,可以加入:

// 设置滚动指示器不可见
self.scrollView.showsHorizontalScrollIndicator = NO;
self.scrollView.showsVerticalScrollIndicator = NO;

这时运行后发现可以滚动,但是图片可以滚动到任何位置
e149d03ede7b0f30t.jpg
如果希望能够像平常淘宝看到的图片轮播,轻轻划一下,可以完整的翻到下一张图片,可以加入:

// 实现分页效果,原理是根据滚动控件的宽度,一个宽度是一页
self.scrollView.pagingEnabled = YES;

fa374a4a1ad8d16bt.jpg


3. 设置自动轮播

通过计时器控件计时

1 先为控制器添加一个timer

@property (nonatomic, strong) NSTimer *timer;

2 viewDidLoad中创建计时器控件

// 创建计时器控件,设定每过两秒执行`scrollImage`方法
self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(scrollImage) userInfo:nil repeats:YES];

3 实现@selector指定的方法

- (void) scrollImage {NSInteger page = self.scrollView.contentOffset.x / self.scrollView.frame.size.width;// 判断是否在最后一页,如果是最后一页设置页码重新设置为第一页if (page == 4) {page = 0;} else {page ++;}CGFloat offsetX = page * self.scrollView.frame.size.width;[self.scrollView setContentOffset:CGPointMake(offsetX, 0) animated:YES];
}

这时候就能看见图片2秒滚动一次了。


4. 同类控件优先级问题

问题描述

当界面中有两个scrollview(或其子类控件)时,在滚动其中一个scrollview时候,设置了计时器的scrollview会暂定自动滚动。
比如拽入一个textView:
c2abd5a14b54c34ct.jpg
如果滚动下面的文字,上面的图片轮播不会继续自动滚动。

问题原因

问题的原因是因为计时器的优先级和view(各种控件)的优先级不同,所以会优先执行view的动作。

解决方法

将计时器的优先级设置和view的优先级相同

// 修改优先级
// 获取当前的消息循环
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:self.timer forMode:NSRunLoopCommonModes];

源代码

如果需要源代码,博主已经上传:http://download.csdn.net/detail/u010127917/9042503


有什么问题都可以在博文后面留言,或者私信,或者微博上找我。
博主主要写javaee和iOS的。
希望大家一起进步。
我的微博:小鱼周凌宇
小鱼周凌宇的微博

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/coderfish/p/4875459.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git 分支管理和冲突解决

创建分支 git branch 没有参数&#xff0c;显示本地版本库中所有的本地分支名称。 当前检出分支的前面会有星号。 git branch newname 在当前检出分支上新建分支&#xff0c;名叫newname。 git checkout newname 检出分支&#xff0c;即切换到名叫newname的分支。 git checkout…

git克隆/更新/提交代码步骤及示意图

1. git clone ssh://flycm.intel.com/scm/at/atSrc 或者git clone ssh://flycm.intel.com/scm/at/atJar 或者git clone ssh://flycm.intel.com/scm/at/atFramework 2. git checkout cpeg/scm/stable 切换分支&#xff0c;然后更新代码 3. git pull 先把远程分支上最新的代码拉到…

互联网金融P2P主业务场景自动化测试

互联网金融P2P行业&#xff0c;近三年来发展迅速&#xff0c;如火如荼。据不完全统计&#xff0c;全国有3000的企业。“互联网”企业&#xff0c;几乎每天都会碰到一些奇奇怪怪的bug&#xff0c;作为在互联网企业工作的测试人员&#xff0c;风险和压力都巨大。那么我们如何降低…

OSGi将Maven与Equinox结合使用

很长时间以来&#xff0c;我一直在努力理解OSGi的真正含义。 它已经存在很长时间了&#xff0c;但是没有多少人意识到这一点。 人们已经大肆宣传它是一种非常复杂的技术。 这是我为所有Java开发人员简化的尝试。 简而言之&#xff0c; OSGi是一组规范&#xff0c;这些规范允许对…

Hadoop:简单介绍

什么是Hadoop&#xff1a; Hadoop是一种用Java编写的框架&#xff0c;用于在大型商品硬件集群上运行应用程序&#xff0c;并具有类似于Google File System和MapReduce的功能 。 HDFS是高度容错的分布式文件系统&#xff0c;与Hadoop一样&#xff0c;旨在部署在低成本硬件上。 它…

Javascript 异步编程的4种方法

你可能知道&#xff0c;Javascript语言的执行环境是"单线程"&#xff08;single thread&#xff09;。 所谓"单线程"&#xff0c;就是指一次只能完成一件任务。如果有多个任务&#xff0c;就必须排队&#xff0c;前面一个任务完成&#xff0c;再执行后面一…

JAVA入门之方法

所谓方法&#xff0c;就是用来解决一类问题的代码的有序组合&#xff0c;是一个功能模块。 一般情况下&#xff0c;定义一个方法的语法是&#xff1a; 其中&#xff1a; 1、 访问修饰符&#xff1a;方法允许被访问的权限范围&#xff0c; 可以是 public、protected、private 甚…

JAVA运算符和优先级

1、算术运算符&#xff1a; 和 -- 既可以出现在操作数的左边&#xff0c;也可以出现在右边&#xff0c;但结果是不同&#xff0c;如&#xff1a; ①int a5&#xff1b;int ba&#xff1b; #先把a赋给b&#xff0c;a再自增 ②int a5&#xff1b;int ba&#xff1b;   #a先…

将JSON功能添加到您的GWT应用程序中

JSON简介 在Web应用程序上工作时&#xff0c;总是会出现客户端-服务器数据交换的问题。 在此问题上有多种方法&#xff0c;其中许多使用XML进行交换。 执行此任务的一种不太知名的格式是JSON。 JSON&#xff08;JavaScript对象表示法&#xff09;是一种轻量级的数据交换格式。…

win10资源管理器怎么打开_让你效率倍增的电脑神器,最强资源管理器增强工具「QTTabBar」...

前言Windows 自带的资源管理器的功能比较简单&#xff0c;够用是够用了&#xff0c;但有时也确实无法满足我们对更便捷高效的操作方式的追求。「QTTabBar」正是一个非常强大的 Windows 资源管理器增强工具&#xff01;不仅支持多标签页管理&#xff0c;还有许多便捷的扩展功能&…

android横向滑动选择的view

做文字编辑&#xff0c;从网上找来的。 HorizontalScrollSelectView&#xff1a; public boolean mAlwaysOverrideTouch true;protected ListAdapter mAdapter;private int mLeftViewIndex -1;private int mRightViewIndex 0;protected int mCurrentX;protected int mNextX;…

excel使用教程_数据分析Excel必备技能:数据透视表使用教程

江米小枣tonylua | 作者掘金 | 来源处理数量较大的数据时&#xff0c;一般分为数据获取、数据筛选&#xff0c;以及结果展示几个步骤。在 Excel 中&#xff0c;我们可以利用数据透视表(Pivot Table)方便快捷的实现这些工作。本文首先手把手的教你如何在 Excel 中手动构建一个基…

java调用webservice_笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解...

原标题&#xff1a;笃学私教&#xff1a;Java开发网站架构演变过程-从单体应用到微服务架构详解Java开发网站架构演变过程&#xff0c;到目前为止&#xff0c;大致分为5个阶段&#xff0c;分别为单体架构、集群架构、分布式架构、SOA架构和微服务架构。下面玄武老师来给大家详细…

专2-第二课 Eclipse开发环境搭建

2.1下载Eclipse 2.2 安装C/C版本的Eclipse 2.3 安装JDT插件开发Java程序 2.4 使用Eclipse开发驱动程序 既然安装了eclipse来进行驱动学习&#xff0c;那么我们就先来试试看eclipse开发驱动的大致流程。这里以Linux设备驱动作为示列给读者展示整个流程&#xff0c;Android底层的…

tkinter 菜单添加事件_Tasker的最新测试劫持了Android 11的电源菜单

流行的Android自动化应用Tasker 最近收到了重大更新&#xff0c;为该应用引入了许多新功能。该更新包括解锁应用程序读取手机上任何传感器以触发任务的功能&#xff0c;使您可以通过任何第三方应用程序自动发送短信或拨打电话的功能&#xff0c;完全请勿打扰自定义功能。通过链…

CLR via C#(18)——Enum

1. Enum定义 枚举类型是经常用的一种“名称/值”的形式&#xff0c;例如&#xff1a; public enum FeedbackStatus { New, Processing, Verify, Closed } 定义枚举类型之后我们在使用时方便了许多&#xff0c;不用再记着0代表什么状态…

电力电子、电机控制系统的建模和仿真_清华团队研发,首款国产电力电子仿真软件来啦~已捐赠哈工大、海工大、清华使用!...

点击上方电气小青年&#xff0c;关注并星标由于微信改版&#xff0c;只有星标才能及时看到我们的消息哦━━━━━━推荐阅读&#xff1a;《膜拜大神&#xff01;清华大学电机系2021年接收推荐免试直硕(博)生拟录取名单公示&#xff01;》《滴滴程序员年薪80万被鄙视不如在二本…

可视化分析之图表选择

转载于:https://www.cnblogs.com/yymn/p/4783631.html

453. 最小操作次数使数组元素相等

给你一个长度为 n 的整数数组&#xff0c;每次操作将会使 n - 1 个元素增加 1 。返回让数组所有元素相等的最小操作次数。 class Solution {public int minMoves(int[] nums) {int res 0;int sum 0;int n nums.length;for(int i 0;i<n;i){sum nums[i];}res sum - min…

第二章 TCP/IP 基础知识

第二章 TCP/IP 基础知识 TCP/IP transmission control protocol and ip internet protocol 是互联网众多通信协议中最为著名的。 2.2 TCP/IP 的标准化 2.2.2 TCP/IP 标准化精髓 TCP/IP 协议始终具有很强的实用性。 相比于TCP/IP &#xff0c;OSI 之所以未能达到普及&#xff0…