开发----Swift自定义View实现 实现自动循环滚动

实现ScrollView自动循环滚动的iOS项目指南 在移动应用开发中,滚动视图(ScrollView)是用户界面中非常常见的一个组件。它可以使得用户在一个有限的视图区域中查看到更多的内容。当内容超出视图范围时,用户可以通过滑动屏幕来浏览被隐藏的部分。无论是在阅读文章,浏览图片还是展示列表,ScrollView的灵活使用都可以提升用户交互体验。7.2.1 使用SDWebImage优化图片加载SDWebImage是iOS开发中用于异步图片下载并缓存的库。它提供了一套完整的解决方案,支持图片的下载、解码、缓存等功能。 阅读详情

AutoScrollImagesView.swift

//
//  AutoScrollImagesView.swift
//  SwiftRealmDatabaseTest
//
//  Created by Sintn on 16/4/12.
//  Copyright © 2016年 sin. All rights reserved.
//

import UIKit


class AutoScrollImagesView: UIView,UIScrollViewDelegate{

    let DEFAULTPAGECONTROLHEIGHT=CGFloat(30.0);
    let DEFAULTPAGECONTROLINDICATIRTINTCOLOR=UIColor.orangeColor();

    var  urlsArrays = Set<String>();
    var  imagesArrays = Set <UIView> ();
    let  imageScrollView=UIScrollView();
    let  imagePageControl=UIPageControl();

    var pageControlPageSize = 0;

    var timsTaskManager=NSTimer();



    override func layoutSubviews() {
        imageScrollView.frame = CGRect.init(x: 0, y: 0, width: self.frame.size.width, height: self.frame.size.height);
        imageScrollView.delegate=self;
        imageScrollView.pagingEnabled=true;
        imageScrollView.showsVerticalScrollIndicator=false;
        imageScrollView.showsHorizontalScrollIndicator=false;
        imageScrollView.canCancelContentTouches=false;
        self.addSubview(imageScrollView);
        imagePageControl.frame=CGRect.init(x: 0, y: self.frame.size.height-DEFAULTPAGECONTROLHEIGHT, width: self.frame.size.width, height: DEFAULTPAGECONTROLHEIGHT);
        imagePageControl.pageIndicatorTintColor=DEFAULTPAGECONTROLINDICATIRTINTCOLOR;
        self.addSubview(imagePageControl);
    }


    func reload(urls:NSArray) {

        pageControlPageSize=urls.count;
        if pageControlPageSize==0 {
            return;
        }
        if urlsArrays.count>0 {
            urlsArrays.removeAll();
        }
        imagePageControl.numberOfPages=pageControlPageSize;
        imageScrollView.contentSize=contentSizeOfScrollView();
        initScrollImages(urls);
    }

    func initScrollImages(urls:NSArray){
        if imagesArrays.count>0 {
            for imageView in imagesArrays {
                imageView.removeFromSuperview();
            }
            imagesArrays.removeAll();
        }

        for otems in urls {
            let scorllImageView = UIImageView.init(frame: CGRect.init(x: 0, y: 0, width: self.frame.size.width, height: self.frame.size.height));
            scorllImageView.sd_setImageWithURL(NSURL.init(string: otems as! String));
            imagesArrays.insert(scorllImageView);
        }
        var  x = CGFloat(0.0);
        for genre in imagesArrays {
            genre.frame = CGRectOffset(genre.frame, x, 0);
            imageScrollView.addSubview(genre);
            x += self.frame.size.width;
        }

    }

    func contentSizeOfScrollView() -> CGSize {
        return CGSize.init(width: self.frame.size.width*CGFloat(pageControlPageSize), height: self.frame.size.height);
    }


    func scrollViewDidScroll(scrollView: UIScrollView)
    {
        let v=imageScrollView.contentOffset.x;
        let k=(imageScrollView.contentSize.width / CGFloat.init(pageControlPageSize));
        imagePageControl.currentPage = Int.init(v/k);
    }

    func beginAutoScroll(timerInterval:NSTimeInterval) {
        timsTaskManager=NSTimer.scheduledTimerWithTimeInterval(timerInterval, target: self, selector: #selector(AutoScrollImagesView.timerTask), userInfo: nil, repeats: true)
    }

    func timerTask() {
        let pt = imageScrollView.contentOffset;
        if pt.x==CGFloat.init(self.frame.size.width * CGFloat.init(pageControlPageSize-1)) {
            imageScrollView.contentOffset=CGPoint.init(x: 0, y: 0);
            imageScrollView.scrollRectToVisible(CGRect.init(x:self.frame.size.width, y: 0, width: self.frame.size.width, height: self.frame.size.height), animated: true);
        }else
        {
            imageScrollView.scrollRectToVisible(CGRect.init(x: pt.x+self.frame.size.width, y: 0, width: self.frame.size.width, height: self.frame.size.height), animated: true);
        }

        if imagePageControl.currentPage<pageControlPageSize-1 {
            imagePageControl.currentPage=imagePageControl.currentPage+1;
        }else
        {
            imagePageControl.currentPage=0;
        }
    }
    func stopAutoScroll() {
        if timsTaskManager.valid {
            timsTaskManager.invalidate();
        }
    }
    override func delete(sender: AnyObject?) {
        super.delete(sender);
        stopAutoScroll();
    }
    /*
     // Only override drawRect: if you perform custom drawing.
     // An empty implementation adversely affects performance during animation.
     override func drawRect(rect: CGRect) {
     // Drawing code
     }
     */

}
Swift实现基于UICollectionView的无限循环轮播图组件LPBannerView Swift-LPBannerView 是一款专为 iOS 平台打造的高性能轮播图组件,基于构建,采用轻量级架构设计,兼顾稳定性与扩展性。其核心目标是在保证流畅滚动体验的同时,提供灵活的定制能力,适用于广告位、活动推广、新闻焦点图等高频交互场景。是的默认布局管理器,负责决定每个 cell 在可视区域中的位置、大小与排列方式。在实现如 LPBannerView 这类视觉轮播组件时,标准的流式布局虽可满足基础展示需求,但面对复杂的交互逻辑(如无限滚动、动态尺寸适配、多方向支持等),必须通过自定义。 阅读详情

相关推荐

Swift 3.0实现轮播图的详细教程

在iOS开发中,UICollectionView是一个非常强大的组件,它提供了灵活的方式来展示有序的数据集合。UICollectionViewFlowLayout是UICollectionView的默认布局,它使得开发者可以轻松地实现像网格、列表和轮播图这样的布局。然而,当默认的UICollectionViewFlowLayout不能满足需求时,就需要进行自定义了。

weixin_42360846的博客 1106

SwiftUI中TabView(PageTabViewStyle的用法及无限滚动组件infinity carousel)

上一篇文章主要介绍了TabView的基本用法以及一些外观样式的设置,本篇文章主要介绍一下PageTabViewStyle样式下的TabView,该样式下的TabView允许用户整页滑动界面,在UIKit中我们用UIScrollView和UICollectionView制作滚动组件,本文采用TabView制作一个无限滚动的组件。

郭永明的技术专栏 2758

Swift开发:构建可扩展的无限轮播视图

在开发中,为了提高代码的复用性、可维护性以及可扩展性,自定义视图类的封装是不可或缺的。本章将介绍如何创建一个名为ZXRollView的自定义视图类,以及如何对其功能进行扩展。ZXRollView首先,我们需要定义ZXRollView类的基本结构,包括它继承自哪个基础类,以及它需要哪些属性。private var宕机页数: Int = 0didSet {// 初始化方法// 初始化内容// 其他方法和属性在上述代码中,ZXRollView继承自UIView。

weixin_35592186的博客 929

Swift UIScrollView滚动视图/无限循环滚动/自动滚动

之前用OC写了UIScrollView,这次用Swift写的,写的不好多担待,O(∩_∩)O~ //先签一下协议 class ViewController: UIViewController , UIScrollViewDelegate { //Swift没有宏定义,只好定义常量来代替宏定义 let SCRO

珊小瑚的博客 6308

swift-一个能滚到世界尽头的PageView

一个能滚到世界尽头的PageView

InfiniteScrollView:Swift 无限循环 ScrollView 自定义Page Control

InfiniteScrollView Swift 无限循环 ScrollView 自定义Page Control ##简单介绍 使用Swift语言和iOS SDK8 实现循环滚动效果;可用于首页banner,展示活动或者广告等信息。自定义UIScrollView, 内嵌UIImageView, 可从网络拉取数据进行填充,方便结合SDWebImage等第三方库进行扩展。本例仅仅是一个小Demo, 所用图片均在ImageSet中, 并未从网络拉取(原版OC实现了网络拉取).同时实现了自定义page control, 不同于自带圆点page control, 本例使用bottom bar做page control, 可自定义颜色;By the way, 定义了UIColorFromRGB函数, 方便直接取16进制颜色代码拷贝。仔细阅读源代码,十分方便扩展,今后也可能会持续更新,完善。 HYInf

Infinite-UIITableview-Scroll:无限滚动的UITableView实现

Infinite-UIITableview-Scroll:无限滚动的UITableView实现 项目介绍 Infinite-UIITableview-Scroll 是一个用Swift语言编写的开源项目,专注于实现UITableView的无限滚动功能。该项目不仅展示了Swift语言的基础用法,还深入探讨了如何在iOS应用中高效地使用UITableView进行数据展示和交互。 项目技术分析 该项目充分...

gitblog_00324的博客 613

swift中UIScrollView广告循环滚动

用swift中UIScrollView实现的广告循环无缝滚动

swift 循环滚动视图水平垂直

目录前言 前言 因为之前工作做得快,提前把以后要做的首页功能看了一遍需求,发现有垂直循环滚动的页面,而且页面除了点击图片,能弹出页面,点击旁边的的区域也能弹出页面,所以封装了,可以水平,垂直,循环滚动,可以自定义页面的工具类. 效果图如下: #使用方法 直接拖拽这2个文件到项目中,然后使用: TdwCircleView.swift TdwCircleViewCell.swift let tdwCircleV2 = TdwCircleView()//设置成成员变量,防止被释放 let vc1 = VC1()

小手琴师的博客 641

swift-CycleLabel循环滚动的label控件

CycleLabel循环滚动的label控件

swift-利用collectionView实现的无限循环滚动卡片动画效果

利用collectionView实现的无限循环滚动卡片动画效果

【亲测免费】 探索SwiftCarousel:打造炫酷的循环滚动视图

探索SwiftCarousel:打造炫酷的循环滚动视图 在移动应用开发中,一个吸引用户眼球的界面设计往往能大大提升应用的吸引力。今天,我们要介绍的是一个轻量级、高效且易于集成的开源项目——SwiftCarousel。这个项目提供了一个原生Swift编写的圆形UIScrollView,不仅支持基本的循环滚动,还能像真正的旋转木马一样旋转,为你的应用界面增添一抹亮色。 项目介绍 SwiftCarous...

gitblog_01189的博客 867

swift-KTCycleRollView循环滚动自动轮播

KTCycleRollView 循环滚动,自动轮播

UIScrollView的循环滚动相册

之前看过 #import @interface MainViewController : UIViewController @property (nonatomic,retain)UIScrollView *scrollview; @end

u014728100的专栏 411

保研专业课复习别瞎卷!抓住408和数学重点,用真题反推高效复习路径

本文针对计算机专业保研学生,提出以真题为导向的408专业课和数学高效复习策略。通过构建真题知识图谱、分析题型与难度矩阵,帮助考生精准把握数据结构、操作系统等核心科目的高频考点,如树与图算法、TCP/IP协议栈等,并制定科学的时间分配方案,实现短期内的快速突破。

weixin_27966471的博客 402

SDFCOM_SWC警告深度剖析:从assign短路到时序标注失效的链路追踪

本文深入剖析了SDFCOM_SWC警告的根源,从assign短路到时序标注失效的全链路追踪。通过分析RTL设计中的assign语句陷阱、综合阶段的优化变形以及PrimeTime生成SDF文件的视角,提出了重构RTL设计、警告抑制和SDF生成优化等解决方案,帮助工程师有效避免时序标注问题。

weixin_42519985的博客 361

LCFInfiniteScrollView: 开启无限循环滚动的新纪元

LCFInfiniteScrollView: 开启无限循环滚动的新纪元 在追求极致用户体验的今天,轮播图作为一个常见的展示元素,几乎存在于每个移动应用中。特别是在App Store风格影响下,无限循环滚动的 banner 视图以其流畅的动画和高效的信息传达能力,成为了焦点所在。今天,我们向您隆重推荐——LCFInfiniteScrollView,一个灵感源自App Store横幅视图的圆形无限滚动...

gitblog_00005的博客 700

Lumerical FDTD新手教程:5步搞定MMI波导光谱模拟(附避坑指南)

本文提供Lumerical FDTD新手教程,详细讲解5步完成MMI波导光谱模拟的实用方法,包括环境准备、结构建模、光源配置、仿真优化和结果分析。特别针对多模干涉耦合器(MMI)的模拟难点,提供避坑指南和优化策略,帮助光学工程师快速掌握FDTD仿真技术。

kite3的博客 358

iOS UIScrollView 循环滚动(loop)

上周,gong'si

peanut 1701

Nature风格的北半球投影图,几行代码就能绘制...

在子刊***Nat. Clim. Chang.***中,通过北极俯视投影表示NAO和AO的EOF分解。仅在定义图层的时候设置为该投影,其余设置content,绘制contourf都是PlateCaree。如子刊Nature Geosci中表示了海冰的漂移,还添加了DEM底图,非常美观。以海温数据为例,ERA5月温度平均,是一张721*1440的0.25degTIF。现在的结果看起来不错,但太大了,我们如果只需要北半球的数据,则需要指定经纬度。绘制完结果也是正方形,和ArcGIS差不多,见之前的推文。

wlh2067的博客 1292

Cursor 详细使用

Cursor 是一款基于 VSCode 开发的 AI 驱动代码编辑器,集成 GPT-4、Claude3.5 等先进 LLM,具备代码补全、生成、解释、调试等功能,可提升开发效率和代码质量。3. 代码编辑:在编辑区编写代码,利用快捷键提升效率,如 Ctrl+Space 触发智能代码补全、Ctrl+K 润色或修改代码、Ctrl+L 智能问答与代码编辑。3. 代码解释:选中代码,按 Ctrl+L,输入如 “解释这段代码的功能”,Cursor 会给出详细解释。

坚持写博客,大家的关注是我前进的动力! 4811

iOS开发之UIPickView的循环显示内容

效果图: UIPickerView实现循环滚动,需要实现UIPickerView的代理以及数据源方法,实现pickerViewLoaded方法! 原理是:是放大返回显示numberOfRowsInComponent!的row数量,实现循环显示! 废话连篇直接上码: @interface TimingController () <UIPickerViewDataSource,UIP...

C_philadd的博客 922

【实战解析】SAP EWM与PP深度集成:从后台配置到前台物料流转的全链路设计

本文深入解析SAP EWM与PP深度集成的全链路设计,涵盖后台配置与前台物料流转的实战应用。通过两种集成模式(DPI与API)的选择策略、十二个关键后台配置步骤详解,以及PMR生成、PSA补货等前台演示,帮助企业实现生产计划与物料供应的高效协同,显著提升生产效率和库存周转率。

weixin_30723433的博客 420

NetBox 插件开发指南:用户界面与明暗主题(Light & Dark Mode)适配

NetBox 的 Web 用户界面内置了浅色(light)与深色(dark)两套主题,用户可以通过导航栏的灯泡图标随时切换,NetBox 也会根据操作系统偏好自动选择默认主题。对于插件开发者而言,理解这套主题机制是保证插件 UI 与 NetBox 主界面视觉一致的前提:插件需要知道当前激活的是哪套主题,并在用户切换主题时同步刷新自身的展示逻辑。本文以官方插件开发文档 [docs/plugins/d

gitblog_00261的博客 724

以太网硬件核心:MAC、PHY、MII与交换机原理与实战排查

计算机网络通信的基础依赖于一套完整的硬件协议栈。在OSI模型中,数据链路层和物理层是实现设备间可靠、高效数据传输的基石。其核心原理在于将上层数据包封装成帧,并通过特定的介质访问控制与物理信号转换机制进行传输。这一过程的技术价值在于为上层应用提供了透明、稳定的通信信道,是互联网和所有局域网通信的物理承载。在嵌入式系统、网络设备开发及运维等应用场景中,深入理解底层硬件交互至关重要。本文将聚焦于以太网硬件的两大核心组件:负责逻辑成帧与流量控制的MAC控制器,以及负责数模转换与链路协商的PHY芯片。它们通过MII、

dgqvhtlwq472235338的博客 420

[Python从零到壹] 十三.机器学习之聚类算法四万字总结全网首发(K-Means、BIRCH、树状聚类、MeanShift)

欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。Python系列整体框架包括基础语法10篇、网络爬虫30篇、可视化分析10篇、机器学习20篇、大数据分析20篇、图像识别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的关注、点赞和转发就是对秀璋最大的支持,知识无价人有情,希望

杨秀璋的专栏 2万+
上一篇: 开发--CentOS 6.4 图文安装教程(有些设置大部分教程没出现过)
心态决定状态
博客等级 码龄16年 14粉丝 15原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值