首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Swift4中以编程方式实现UIScrollView和UIPageControl?

在Swift4中,可以通过编程方式实现UIScrollView和UIPageControl的联动效果。下面是一个完整的示例代码:

首先,创建一个UIViewController,并在其中添加UIScrollView和UIPageControl的实例变量:

代码语言:txt
复制
import UIKit

class ViewController: UIViewController {
    var scrollView: UIScrollView!
    var pageControl: UIPageControl!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 添加UIScrollView
        scrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height))
        scrollView.isPagingEnabled = true
        scrollView.delegate = self
        view.addSubview(scrollView)
        
        // 添加UIPageControl
        pageControl = UIPageControl(frame: CGRect(x: 0, y: view.frame.height - 50, width: view.frame.width, height: 50))
        pageControl.numberOfPages = 3
        pageControl.currentPage = 0
        pageControl.addTarget(self, action: #selector(pageControlValueChanged(_:)), for: .valueChanged)
        view.addSubview(pageControl)
        
        // 添加内容视图
        let contentViewWidth = view.frame.width * CGFloat(pageControl.numberOfPages)
        let contentView = UIView(frame: CGRect(x: 0, y: 0, width: contentViewWidth, height: view.frame.height))
        contentView.backgroundColor = UIColor.red
        scrollView.addSubview(contentView)
        
        // 设置UIScrollView的contentSize
        scrollView.contentSize = contentView.frame.size
    }
    
    @objc func pageControlValueChanged(_ sender: UIPageControl) {
        let xOffset = scrollView.frame.width * CGFloat(sender.currentPage)
        scrollView.setContentOffset(CGPoint(x: xOffset, y: 0), animated: true)
    }
}

extension ViewController: UIScrollViewDelegate {
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let pageIndex = round(scrollView.contentOffset.x / scrollView.frame.width)
        pageControl.currentPage = Int(pageIndex)
    }
}

在上述代码中,我们首先创建了一个UIScrollView和一个UIPageControl,并将它们添加到UIViewController的视图中。然后,我们创建了一个内容视图,将其添加到UIScrollView中,并设置UIScrollView的contentSize以适应内容视图的大小。

接下来,我们实现了UIPageControl的valueChanged事件处理方法,当用户切换页面时,会触发该方法。在该方法中,我们根据当前选中的页面更新UIScrollView的contentOffset,以实现页面切换效果。

最后,我们通过UIScrollViewDelegate协议中的scrollViewDidScroll方法,实时更新UIPageControl的当前页码。

这样,我们就实现了UIScrollView和UIPageControl的联动效果。在实际应用中,可以根据具体需求进行进一步的定制和优化。

推荐的腾讯云相关产品:腾讯云移动开发平台(https://cloud.tencent.com/product/mpp)

请注意,本回答仅提供了一个示例实现,实际应用中可能需要根据具体需求进行适当调整和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

UIScrollView UIPageControl 实现启动滑动图

UIPageControl 为启动滑动图做准备 UIScrollView : 带有滑动效果,在上面加入UIImageView再设置代理后,可以实现翻页显示图片的效果 涉及的相关属性: contentSize... _scrollView 显示在 同一个页面 UIPageControl *pageConteol = [[UIPageControl alloc] initWithFrame:CGRectMake...,这里进行的是 UIPageControl UIScrollView 的配 套使用、滑动图消失信息等: 涉及到的相关属性: UIScrollView: contentOffset : UIScrollView...,并保存信息 这里只需要将UIScrollViewUIPageControl 从主屏幕上移除就可以了,别忘了将启动信息保存到 NSUserDefaults ,当然你可以设置一些动画效果,或者需要点击才能移除都可以...,下面给出的代码是一个简单的动画效果: 代码如下: -(void)scrollViewDisappear{ //拿到 view UIScrollView UIPageControl

55410

iOS开发之UIScrollView无限滚动

UIScrollView 的无限滚动主要应用在图片轮播器、欢迎界面等场景。首先需要说明的是,文本所讲的是一种"笨办法",但是好理解且容易实现,在图片不多的时候用它也无妨。...2、代码实现,主要分为:添加UIScrollView,添加显示图片,添加UIPageControl,然后监听UIScrollView的滚动,根据滚动的位置来设置UIPageControl,最重要的是对于滚动到两个边缘时要特殊处理一下...(0, 64, SCREEN_WIDTH, IMG_HEIGHT)]; //创建UIImageView并添加到UIScrollView for (int i = 0; i< MAX_SIZE...的代理方法,在该方法改变UIPageControl并且处理边缘滚动 -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {...//对最后一张第一张要进行特殊处理 //1、如果是第一张 if (currentPage == 0) { //下面两个方法任选其一都可以达到效果,但是注意动画一定要设置为

1.7K100

IOS开发系列——启动页专题【整理,部分原创】

1 系统自带方式 1.1 添加图片 1,准备图片资源,放入工程,即可,默认时间为1s iOS设备现在有三种不同的分辨率:iPhone 320x480、iPhone 4 640x960...我是用NSUserDefaults +UIScrollview实现。 新建一个类,继承UIView,假设名为Guide。...*)scrollView { UIPageControl *pagControl = (UIPageControl *)[self.view viewWithTag:100]; pagControl.currentPage...0)animated:YES]; } 4.3 第三方库MYBlurIntroductionView方案 4.3.1 设计思路 新建一个LaunchVC,然后在RootVC模态窗口的方式弹出此...引导页采用本地缓存方式,支持从服务端动态加载然后更新显示。 4.3.2 LaunchVC弹出逻辑 LaunchVC弹出逻辑(注意只加载一次): if (!

1.7K10

使用 UICollectionView 实现首页卡片轮播效果

UICollectionView 是 iOS6 之后引入的一个新的 UI 控件,与 UITableView 有着很多相似的地方,在开发过程我们都会选择使用它们俩来为 App 的整个页面进行布局,比如说淘宝的首页...如何使用 UICollectionView 实现网易云首页卡片轮播效果。...通过观察上面的图我们可以得出,这个网易云的轮播控件有三个特点,分别是: 1.支持图片手动横向滚动2.支持图片自动的滚动播放3.底部的分页控件会高亮显示出当前的图片是哪一张 好了,既然已经分析出来了它的特点,那接下来就进入到编程环节吧...JUST DO IT 想到滚动,大家首先想到的肯定是用 UIScrollView + UIImageView 的方式实现,但是 UICollectionView 给我们提供了更好的选择,因为它本身继承自...UIScrollView 然后又支持横向滚动,所以使用 UICollectionView 来实现横向滚动效果是最好不过的。

1.9K20

Swift4语法新特性 原

Swift4,无论是代码风格还是编程理念都更进一步的融合了许多现代编程的思想。...<array.count]{ print(item) } Swift3的...运算符只是作为闭区间运算符使用,在Swift4,可以用它来取集合类型的边界,字符串,数组等,看如下代码: let...,可是Teacher类同时实现了两个协议,这在Swift3版本是无法解决的问题,在Swift4你则可以这样写: protocol People { var name:String{set get...灵活性表现在如下几点: 1.强大的泛型编程方式,协议关联类型等。 2.where子句可以精准的进行泛型约束。 3.Optioal类型可失败构造方法的支持。...最后,一语总结Swift语言:一门十分强大并且十分易入门的现代编程语言,只要你掌握了所有语法规则,想出错很难!

1.7K30

【IOS开发基础系列】UIScrollView专题

scroll view 还处理缩放和平移手势,要实现缩放和平移,必须实现委托 viewForZoomingInScrollView:scrollViewDidEndZooming:withView:atScale...重要的提示:在UIScrollView对象,你不应该嵌入任何UIWebViewUITableView。...那么这里就有疑问了,既然该属性设置未来NO了,那么岂不是UIScrollView不能处理任何事件了,那么为何在子视图上快速滚动的时候,UIScrollView还能移动那。...    减速的开始结束 2.3.1 通过子类化扩展ScrollView的行为         创建一个子类         重写一些功能并改变行为         关于这种方式的争议        ...你的代码变得很牢固地配对在一起,它实际上变成了超类的一部分,你无法从UIScrollView析取它,之后用其它东西代替,如果它在你控制器且为控制器的一部分,在之后更容易改变它工作的方式重新安排你应用程序的一些部分

40830

两个imageView实现图片轮播

前言 在不少的项目中,都会用到图片轮播这个功能,现在网上关于图片轮播的轮子也层出不穷,千奇百怪,笔者根据自己的思路,用两个imageView也实现了图片轮播,这里给大家介绍笔者的主要思路以及大概步骤。...轮播实现步骤 层级结构 最底层是一个UIView,上面有一个UIScrollViewUIPageControl,scrollView上有两个UIImageView,imageView的宽高=scrollView...(ps:此处应该注意滚动到第一张最后一张的边界情况) #pragma mark - 设置滚动方向 - (void)setDirection:(Direction)direction {...自动滚动 轮播的功能实现了,接下来就是添加定时器让它自动滚动了。...,如果有,则替换之前的占位图片,如果没有,去沙盒中取,如果有,替换占位图片,并添加到缓存,如果没有,开启异步线程下载 监听图片点击 在实际开发,通常轮播图都有点击图片跳转到对应的内容的操作,因此需要监听图片的点击

1.1K50

两个imageView实现图片轮播

前言 在不少的项目中,都会用到图片轮播这个功能,现在网上关于图片轮播的轮子也层出不穷,千奇百怪,笔者根据自己的思路,用两个imageView也实现了图片轮播,这里给大家介绍笔者的主要思路以及大概步骤。...轮播实现步骤 层级结构 最底层是一个UIView,上面有一个UIScrollViewUIPageControl,scrollView上有两个UIImageView,imageView的宽高=scrollView...(ps:此处应该注意滚动到第一张最后一张的边界情况) #pragma mark - 设置滚动方向 - (void)setDirection:(Direction)direction {...自动滚动 轮播的功能实现了,接下来就是添加定时器让它自动滚动了。...,如果有,则替换之前的占位图片,如果没有,去沙盒中取,如果有,替换占位图片,并添加到缓存,如果没有,开启异步线程下载 监听图片点击 在实际开发,通常轮播图都有点击图片跳转到对应的内容的操作,因此需要监听图片的点击

1.1K30

iOS 面向协议方式封装空白页功能

嘿嘿,这个可以有,那我们接下来就来试试怎么通过协议的方式来避免上述情况,并且实现一行代码添加空白页功能 前言 如果对面向协议有疑问的同学可以看下我之前的两篇文章 iOS - Swift 面向协议编程...要明白这里的self指的是UIViewController,考虑到UIView的可能,这里我就让万物对象之父NSObject来遵守,并实现对应的数据源方法代理方法 extension NSObject...但是,这样直接写死的方式很不好,有时候一些场景是需要我们做出定制的,那怎么实现定制呢?协议又不能有自己的变量来存放我们的定制。...,非常地恰巧,我们定义的方法lxf_EmptyDataSet需要外界将UIScrollView传递进来,在DZNEmptyDataSet的数据源方法代理方法也有scrollView。...可以使用Cocoapods的方式来安装使用 pod 'LXFProtocolTool' 我也将 iOS - Swift 面向协议编程(二) 中提及的通过协议便捷加载xib的功能也集成了进来。

1.4K50

Swift4 新特性一览

Swift4,private变量也可以被其extension读取。 类接口的组合语法支持 例如在代码,定义了一个接口名为Shakeabe,并让UIButtonUISlide来实现此接口。...& Shakeable] 再例如,在OC,我们会有如下代码: @property (weak) NSView *client; 在Swift4,直接可以用以下语句来实现...var client: [NSView & NSTextInputClient]工具附加特性 XCode提供了refactor功能 编译相关 加快了编译速度 Swift3.2可以Swift4进行共存...,变成了 Swift4: let values = "One, Tow,Three...." var i = values.startIndex 在遍历String的过程,如果从下标i的string...Swift4支持了分段长字符的表达方式,例如以前为: var str = "Q: How does the project \(projectName) do in this process?

1.1K20

Cocoa编程中视图控制器与视图类详解

: UIButton UISegmentedControl UISwitch UISlider UIPageControl UITextField 表格拾取器: UITableView (对于表格的行有一个...选项卡类的方便之处就是不需要象导航栏那样栈的方式推入弹出视图的操作,而是组建一系列的控制器(它们各自可以是UIViewController、UINavigationController、UITableViewController...不过,也可以视具体情况,我们直接在一个独立的视图控制器创建UITabBarController实例对象,自定义一个用于视图 切换的控制器类ViewSwitcherViewController,就可在其中的...在实现UITabBarControllerDelegate委托的视图控制器重写init方法来自定义UITabBarItem条目。...控制器加载视图过程 当调用视图控制器的view属性时,视图控制器会先调用loadView方法加载视图,因此,可以在loadView方法创建所有的视图,这是比较好的编程惯例。

5K50

在Swift创建可缩放的图像视图

基本上,我们将在UIScrollView嵌套一个包含图片的UIImageView,它将处理所有我们扔给它的缩放、平移(点击!)手势。...我们希望能够编程方式通过Interface Builder使用PanZoomImageView,所以让我们处理不同的初始化器,并创建一个通用的init。...我们有了一个UIIm我们已经有了一个嵌套在UIScrollView的UIImageView,一切都应该是可滚动可平移的。但是我们如何设置我们的图像呢?...试试平移缩放(如果你使用的是模拟器,按住 "option "键)--你会对你的图像有一个全新的视角 编程方式初始化视图 在使用界面生成器时,这很好--但如果你想编程方式初始化视图呢?...让我们给我们的类添加另一个初始化器,这样我们就可以在代码设置图像名称。 medium.com/media/074d4… 就这样了!现在我们可以像这样通过图片名称编程方式初始化我们的视图了。

5.6K20

iOS自定义的emoji表情键盘 原

CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 200)];     //分页控制器     pageControlBottom = [[UIPageControl...*28+indexPath.row];     //这里手动将表情符号添加到textField上      } //翻页后对分页控制器进行更新 -(void)scrollViewDidScroll:(UIScrollView...0:1);     pageControlBottom.currentPage = page; } 三、切换系统键盘自定义的表情键盘         UITextFieldUITextView都会有下面这个属性方法...成为第一响应时的弹出附件,如果我们不设置或者设置为nil,则会弹出系统键盘,reloadInputView方法可以使我们刷新这个附件视图,通过这两个,我们可以非常轻松的实现键盘的切换,比如我们在一个出发方法如下处理...追注:测试上面的SBUnicode码在模拟器上可以正常显示,真机并不能识别,可以通过将表情符全部添加到一个plist文件,通过文件读取来创建键盘的方式进行真机上的开发。

2.9K10

iOS中高级开发人员跳槽涨薪必备面试问题

Objective-C 的 class 是如何实现的?Selector 是如何被转化为 C 语言的函数调用的? UIScrollView 大概是如何实现的,它是如何捕捉、响应手势的?...Objective-C 如何对已有的方法,添加自己的功能代码实现类似记录日志这样的功能? +load  +initialize 的区别是什么? 如何让 Category 支持属性?...Objective-C ,meta-class 指的是什么? UIView  CALayer 之间的关系?...你会如何存储用户的一些敏感信息,登录的 token。 有用过一些开源组件吧,能简单说几个么,大概说说它们的使用场景实现。 什么时候会发生 EXC BAD ACCESS 异常?...(对 UIScrollView 的理解程度) 编程实现 简述「Snakes and Ladders」的实现思路(这道题比较容易阐述清楚,且难度适中) 推荐阅读 准备跳槽的你,这些常用面试题你掌握了嘛?

1.1K00

iOS开发·runtime原理与实践: 消息转发篇(Message Forwarding) (消息机制,方法未实现+API不兼容奔溃,模拟多继承)

如果上面两步都通过了,就开始查找这个类的实现IMP,先从cache里查找,如果找到了就运行对应的函数去执行相应的代码。 如果cache没有找到就找类的方法列表是否有对应的方法。...如果类的方法列表找不到就到父类的方法列表查找,一直找到NSObject类为止。 如果还是没找到就要开始进入动态方法解析消息转发,后面会说。 其中,为什么它被称为 “转发”?...换句话说,无论何时发送未知消息,它​​都会一个很好的包发送到您的代码,此时您可以随心所欲地执行任何操作。 1.3 OC的方法本质 OC的方法默认被隐藏了两个参数:self_cmd。...动态特性:方法解析消息转发 没有方法的实现,程序会在运行时挂掉并抛出 unrecognized selector sent to … 的异常。...转发继承相似,可用于为OC编程添加一些多继承的效果,一个对象把消息转发出去,就好像他把另一个对象中放法接过来或者“继承”一样。

1.9K11

MJRefresh源码分析 原

这两个组件是作为子视图添加在UIScrollView上的,因此UIScrollView的原生头尾视图都不影响。...在以前版本的MJRefresh,使用的是headerfooter属性,容易产生疑惑,因此后面版本框架中都添加了mj前缀。    ...五、MJRefresh编程风格技巧与小亮点 1.复用,复用,再复用     之所以看MJRefresh库的代码非常舒服,很大一部分源自其深入的复用。...MJRefreshHeaderMJRefreshFooter作为头部与尾部刷新组件的基类,抽象出了构造函数,并且实现了大部分组件与外部的布局,逻辑动作等函数。再子类则专注与实现子类自身的UI与功能。...还有一个小细节,也可以看出MJRefresh对复用的追求,在setState函数的实现,如果新的状态与旧的状态一致,则不需要做任何逻辑,所有的setState函数都需要这个逻辑,MJRefresh采用的宏的方式进行替换

65210

iOS 面试策略之系统框架-UIScrollView及其子类

第三步,实现列表删除移动功能。...如果要定制化实现 Supplementary Views Decoration Views,那就要实现 UICollectionViewLayout 抽象类。...9.说说实现预加载的方法 关键词:#网络传输 #无限滚动 #Threshold 在实际开发,列表经常需要随着滑动而不停的展示新的内容。在滑动到一定程度后,我们就需要发送网络请求,获得新的数据。...以上只是一种比较直接的实现,最复杂的部分在于 prepare() 运用 xOffset yOffset 构建 LayoutAttributes 的过程,其中含有大量的数学计算。...网上对于瀑布流有很多实现,大家不妨借鉴的同时,亲自动手,加深对 UICollectionView 的理解。 访问我的Github仓库查看更多精彩分享

2.6K21
领券