iOS 第12课 图片轮播的实现

论文学习:Towards Automated Infographic Design:Deep Learning-based Auto-generation of Extensible Timeline title: “Towards Automated Infographic Design:Deep Learning-based Auto-generation of Extensible Timeline” tags: [“论文评述”, “报告”] date: 2019-08-22 author: 叶慧 mathjax: true 论文:Towards Automated Infograph... 阅读详情



0:首先还是通过纯的代码来实现

0:删除3个文件ViewController.h,ViewController.m,Main.storyboard

1:修改点击左边的蓝色按钮,然后选择general-》developer info-》main interface ,将这个main interface 晴空

2:然后再创建一个MainUIViewController ,它继承自UIViewController

1:Appdelegate.m

//
//  AppDelegate.m
//  TwelveRollingView
//
//  Created by Kodulf on 16/10/28.
//  Copyright © 2016年 Kodulf. All rights reserved.
//

#import "AppDelegate.h"
#import "MainViewController.h"
@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    [self setWindow:[[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]];
    [self.window makeKeyAndVisible];
    [self.window setRootViewController:[[MainViewController alloc]init]];
    return YES;
}


- (void)applicationWillResignActive:(UIApplication *)application {
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
}


- (void)applicationDidEnterBackground:(UIApplication *)application {
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}


- (void)applicationWillEnterForeground:(UIApplication *)application {
    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}


- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}


- (void)applicationWillTerminate:(UIApplication *)application {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}


@end


2:拷贝图片到

Asset.xcassets里面

这里的图片的下载地址:然后依次命名为1.jpg,2.jpg......

http://fdfs.xmcdn.com/group16/M08/F1/13/wKgDbFal40bR7Uc6AAH3JpWhLiQ015_android_large.jpg

http://fdfs.xmcdn.com/group10/M07/F0/14/wKgDaVal9ZLTP5q1AAFIJeYaktQ092_android_large.jpg

http://fdfs.xmcdn.com/group12/M07/E8/35/wKgDXFacqEfReClFAAFvbZHe_mU331_android_large.jpg

http://fdfs.xmcdn.com/group9/M05/EE/15/wKgDZlagtF_yH9YXAAEyq6YSxDo657_android_large.jpg

http://fdfs.xmcdn.com/group11/M07/FC/B4/wKgDbValyzzy0fBpAAMdsEAuI-Q295_android_large.jpg

http://fdfs.xmcdn.com/group9/M01/EF/02/wKgDZlaiCqbTzvIzAAH_l7MCT-k503_android_large.jpg


3:更新MainUIViewController.m

//
//  MainViewController.m
//  TwelveRollingView
//
//  Created by 章银珊 on 16/10/28.
//  Copyright © 2016年 章银珊. All rights reserved.
//

#import "MainViewController.h"

@interface MainViewController () <UIScrollViewDelegate>
@property (nonatomic,strong)UIScrollView *scrollView;
@property (nonatomic,strong)UIPageControl *pageControl;
@property (nonatomic,strong)NSTimer *timer;
@end

@implementation MainViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view setBackgroundColor:[UIColor whiteColor]];
    CGFloat width = CGRectGetWidth(self.view.bounds);//获取屏幕的宽度
    self.scrollView =[[UIScrollView alloc]initWithFrame:CGRectMake(0, 20, width, 220)];//第二个参数要设置为20,否则会显示在顶部
    [self.scrollView setBackgroundColor:[UIColor grayColor]];
    [self.view addSubview:_scrollView];
    //设置分页效果
    [self.scrollView setPagingEnabled:YES];
    //隐藏水平滚动条
    [self.scrollView setShowsHorizontalScrollIndicator:NO];
    
    [self.scrollView setContentSize:CGSizeMake(width*5, 0)];
    //设置代理
    [self.scrollView setDelegate:self];
    
    for (NSInteger i = 0;i<5;i++) {
        //注意了UIImageView和UIImage是不同的
        UIImageView *uimage=[[UIImageView alloc] initWithFrame:CGRectMake(width*i, 0, width, 220)];
        [uimage setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",i+1]]];
        [_scrollView addSubview:uimage];
    }
    
    self.pageControl =[[UIPageControl alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(self.scrollView.frame)-20, width, 20)];
    [self.pageControl setTintColor:[UIColor whiteColor]];
    [self.pageControl setNumberOfPages:5];
    [self.view addSubview:_pageControl];
    
    
    //下面就需要设置定时器去实现轮播的效果
    [self initTimer];
    
    //考虑有多个scrollview的情况,涉及到线程,
    //添加了scrollview2的时候,定时器会忽快忽慢
    //解决办法,写在initTimer里面了
    UIScrollView *scrollView2 = [[UIScrollView alloc]initWithFrame:CGRectMake(0, CGRectGetHeight(self.scrollView.frame)+40, width, 200)];
    [scrollView2 setBackgroundColor:[UIColor blackColor]];
    [scrollView2 setContentSize:CGSizeMake(width*5, 0)];
    [scrollView2 setScrollEnabled:YES];
    [self.view addSubview:scrollView2];
    
    
    
    // Do any additional setup after loading the view.
}
-(void)scrollImage{
    //不用麻烦,可以直接食用pagecontrol。而不用去NSInteger currentPage = self.scrollView.contentOffset.x/CGRectGetWidth()
    NSInteger nextPage = [self.pageControl currentPage]+1;
    if(nextPage%5==0){
        nextPage = 0;
    }
    [self.scrollView setContentOffset:CGPointMake(CGRectGetWidth(self.scrollView.frame)*nextPage, 0) animated:YES];
    
    
}
-(void) initTimer{
    if(!self.timer){
    self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(scrollImage) userInfo:nil repeats:YES];
        //就是我们现在由于其他滚动视图的引入的导致和我们的定时器有冲突,获取当前的runloop和android 里面的handler 有点类似的感觉,首先添加timer到当前的runloop,然后设置mode为NSRunLoopCommonModes就可以了
        //当我们使用NSTimer的scheduledTimerWithTimeInterval的方法创建的时候,实际上timer就会被加入到当前的线程的runloop当中,并且系统的默认的模式是NSDefaultRunLoopModes。
        //而如果我们当前的线程,也就是ui主线程,由于某些的ui事件,比如说像这的scrollview的操作,就会将runloop自动切换为NSEventTrackingRunLoopMode的模式,然后在这个的过程中默认的模式注册的事件是不会被执行的,也就是说,使用此时使用scheduledTimerWithTimeInterval的添加到runloop中的timer 就不会被执行了,事件不会被执行,就会看到停顿的效果,当这种冲突结束的时候,我们的系统又会给我们把mode恢复回去,此时它有生效了,大家就会看到忽快忽慢,
        //说白了,就是由于我们其他的滚动视图的产生,会导致我们runloop的模式发生变化,而导致我们自动调用的事件无法在runloop循环的过程中正确的被执行,
        //所以要想把这个问题解决好,我们必须手动的把runloop给设定好了,让它去采用我们制定的模式,而不是任由它由其他视图的影响而导致我们的模式的变化。
        [[NSRunLoop currentRunLoop]addTimer:self.timer forMode:NSRunLoopCommonModes];
    }
}

//为了解决手动的滑动和timer之前的冲突,首先是在开始拖拽的时候去掉,然后再在结束拖拽的时候添加
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    [self.timer invalidate];//首先让timer失效
    [self setTimer:nil];
}

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
        [self initTimer];
}


                  
                  
                  
//在这个方法里面去设置pageControl去显示哪一个图片
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    [self.pageControl setCurrentPage:(NSInteger)(scrollView.contentOffset.x/CGRectGetWidth(scrollView.frame))];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end




YOLOv11知识蒸馏实战:让小模型拥有大模型90%精度,速度提升3倍的终极教程 在self.alpha = alpha # 蒸馏损失权重self.temperature = temperature # 温度系数,控制分布平滑度# 输出分布蒸馏(KL散度损失)# 中间特征蒸馏(MSE损失,对齐中间层特征)# 总蒸馏损失知识蒸馏是YOLOv11在“小模型高性能部署”场景的“破局之法”——它让小模型能“站在大模型的肩膀上”,兼具速度与精度。从损失函数定义到多阶段训练,再到实战落地,本教程已为你铺就了一条清晰的路径。 阅读详情

相关推荐

边缘智能新篇章:RK3588上YOLOv8姿态估计的轻量化部署与性能优化实战

本文详细介绍了在RK3588平台上部署和优化YOLOv8姿态估计模型的完整流程。通过模型转换、ONNX中间表示和性能优化策略,实现在边缘设备上的高效实时推理,为嵌入式AI应用提供可行的轻量化解决方案。

ik6789012的博客 151

iOS开发UI篇—UIScrollView控件实现图片轮播

iOS开发UI篇—UIScrollView控件实现图片轮播 一、实现效果 实现图片的自动轮播            二、实现代码 storyboard中布局 代码: 1 #import "YYViewController.h" 2 3 @interface YYViewController () 4 @property (w

技术之窗 502

ESP32C6+ESP-IDF5.2实战:基于RS485的ModbusRTU从站开发与调试

本文详细介绍了基于ESP32C6和ESP-IDF5.2开发ModbusRTU从站的实战指南。涵盖硬件连接、协议实现、ESP-Modbus库移植、寄存器映射及调试技巧,帮助开发者快速构建稳定可靠的工业级RS485通信节点,并解决常见通信故障。

play7的博客 1188

Cartography实现图片轮播:iOS应用中的流畅布局

你是否还在为iOS图片轮播的布局适配头疼?Auto Layout冗长的代码、复杂的约束管理、滑动时的卡顿问题,是否让你倍感困扰?本文将带你使用Cartography这个声明式布局框架,用不到50行代码实现一个流畅的图片轮播组件,解决轮播布局中的常见痛点。 ## 为什么选择Cartography? Cartography是一个基于Swift的声明式Auto Layout DSL(领域特定语言),...

gitblog_00029的博客 648

UVC协议在STM32H7上的移植实战案例

手把手带你把UVC协议移植到STM32H7平台,重点解决USB高速枚举、视频流控制与YUV数据打包等关键问题。基于HAL库实现符合UVC 1.5规范的即插即用摄像头功能,让嵌入式设备轻松变身标准UVC视频源。

weixin_42437253的博客 397

手把手教你用C#和LibUsbDotNet实现USB设备通信(含完整代码示例)

本文详细介绍了如何使用C#和LibUsbDotNet库实现USB设备通信,包括设备识别、连接建立、同步/异步数据读写等核心操作。通过完整的代码示例,开发者可以快速掌握USB通信的关键技术,适用于工业自动化、医疗设备等多种场景。重点讲解了数据读写优化和错误处理技巧,帮助提升通信效率和可靠性。

a3b4c5的博客 704

iOS实现图片自动轮播展示

一、需要实现的效果如下图1,首页图片自动轮播展示,其中图片从网络异步加载,加载过程用风火轮显示加载中,如图2。 本文参考了以下博客文章: http://www.haodaima.net/art/2687144 http://www.cnblogs.com/xiaobaizhu/archive/2012/12/18/2824255.html 图1 图2

dolacmeng的专栏 4653

线性代数——(期末突击)行列式(上)-行列式计算、行列式的性质

简单解释一下:4213原本的顺序应为1234,对于‘4’而言,‘2’、‘1’、‘3’都应该排在它的前面,所以此处记逆序数为3;对于‘2’而言,‘1’应该排在它的前面,而‘3’排在它之后 是合理的,所以此处只有一个逆序数;最后看‘1’,其后面的‘3’排在后面显然也是合理的,故而4213的逆序数为4.一般我们使用这个性质来计算四阶行列式,也就是将其变换成三角行列式,再计算对角线的值;以主对角线为分界线的就为正三角,反之则为反三角行列式。若行列式某一行(列)为0,则该行列式=0.将和的那一行分开,其余行。

li13437542099的博客 1万+

IOS开发之——图片轮播器(14)

一 步骤 scrollView getter方法懒加载只指定了大小,添加到视图 viewDidLoad中添加图像,并且计算位置 运行观察效果,修改scrollView的属性....... 实例化UIPageControl 因为分页控件和滚动视图是分离的,因此监听滚动停止代理方法,修改分页控件的页数 将UIPageControl定义成属性,并且添加监听方法 实现监听方法,页数变化后,修改scrollView的位置 添加时钟,调用分页控

我的博客 792

告别商业软件?实测用gnina(CNN打分版)做分子对接:从安装到跑通第一个案例

本文详细介绍了基于卷积神经网络(CNN)的开源分子对接工具gnina的安装与实战应用。从环境配置、编译安装到运行第一个COVID-19主蛋白酶抑制剂对接案例,全面解析了这款替代商业软件的强大功能,特别适合预算有限的研究团队进行药物发现和虚拟筛选。

weixin_42522320的博客 255

AES-128-CMAC:背景、汽车应用、CAPL 实现与开源工具验证

本文详解车载诊断中AES-128-CMAC算法的原理与应用,涵盖其在UDS安全访问、刷写鉴权、SecOC认证及密钥派生中的核心作用。结合真实汽车电子场景,提供纯CAPL实现代码与测试脚本,并通过pycryptodome进行逐字节验证,确保算法正确性。全程基于CANoe实测数据,可直接用于HIL环境复现,助力开发者高效落地汽车网络安全方案。

蚂蚁小兵 113

iOS 自定义图片轮播器类。

很多app都有图片轮播器,功能基本都一样,把他单独抽取出来做一个类,以后自己用方便。 // XBScrollPlay.h // 图片轮播器 // Created by 小白 on 15/12/20. // Copyright © 2015年 xiaobai. All rights reserved. // #import @class XBScrollPlay; @pro

奋斗吧,少年! 697

vue2学习笔记2-老规矩,从Hello World开始,了解Vue实例和模板

想要把“Hello,World”放置在页面上,首先需要准备一个HTML的块级元素div,来承接内容。

l_q_l的专栏 1257

iOS-图片轮播-SDCycleSCrollView的使用

介绍: SDCycleScrollView 是一款非常强大的轮播图第三方. 轮播流畅,手滑流畅.使用方便.自定义简单. 可以更改pageControl. 一. Demo地址https://pan.baidu.com/disk/home#list/path=%2F总结%2FDemo-图片轮播 二.效果截图. 三.代码. #import "ViewController.h" #import "Masonry.h" #import "SDCycleScrollView.h" #defin.

u013712343的博客 2459

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Swift - 图片循环轮播组件的实现(附样例)

图片的无限循环轮播功能常常用在广告或者新闻展示上面,本文演示如何实现一个 iOS 系统下的图片轮播组件。 1,组件功能介绍 (1)每隔一段时间,轮播器就会自动滚动到下一张图片。如果当前是最后一张图片的话,则又滚动回第一张图片。这样无限循环下去。 (2)在组件下方位置有页控制器(小圆点),显示图片数量和当前的位置。 (3)除了自动轮播,我们还可以通过手动滑动组件来显示上一张,

mo_xiao_mo的博客 6272

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

OpenHarmony Flutter 图片轮播组件实现指南

本文介绍了在OpenHarmony平台上使用Flutter框架实现图片轮播组件的方法。主要内容包括:1)核心功能特性,如自动播放、手动滑动和指示器显示;2)技术实现细节,通过PageView和PageController实现轮播效果,使用状态管理跟踪当前索引;3)高级扩展功能,包括暂停播放、点击跳转和自定义指示器等。文章还提供了性能优化建议,如图片懒加载和错误处理,帮助开发者构建高效、流畅的图片轮播组件。

2301_77576302的博客 657

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IOS开发基础之图片轮播器-12

IOS开发基础之图片轮播器-12 核心代码 // // ViewController.m // 12-图片轮播器 // // Created by 鲁军 on 2021/2/2. // #import "ViewController.h" @interface ViewController () <UIScrollViewDelegate> @property (weak, nonatomic) IBOutlet UIScrollView *scrollView; @propert

A1521315qwss的博客 282

UIScrollView控件实现图片轮播

http://www.cnblogs.com/dyf520/p/3805297.html 一、实现效果 实现图片的自动轮播 二、实现代码 storyboard中布局 代码: 1 #import "YYViewController.h" 2 3 @interface YYViewController (...

bailu1020的博客 96

iOS nstimer 实现自动轮播

iOS NSTimer 实现自动轮播 在iOS开发中,使用NSTimer实现自动轮播的功能是一个常见的需求。在这篇文章中,我将教你如何使用NSTimer来创建一个简单的自动轮播效果。我们将从流程开始,逐步走过每一步。 流程概述 以下是实现自动轮播的简单流程图: #render_12_2431622739-svg{font-...

weixin_36043375的博客 209

iOS 轮播图

今天给大家带来的是轮播图的实现,这里简单的讲述下轮播图的原理假如说,我现在有3张图片,正常是这样摆放的

Amydom的博客 1059

iCarousel深度解析:打造惊艳的iOS轮播组件

iCarousel是一个功能强大、高度可定制的iOS和macOS轮播组件库,由Nick Lockwood开发并维护。该项目采用Objective-C编写,支持ARC,提供了丰富的3D轮播效果和灵活的配置选项,让开发者能够轻松创建出令人惊艳的轮播界面。本文将从项目概述、核心特性、架构设计、轮播类型详解以及快速入门等方面进行深度解析。 ## iCarousel项目概述与核心特性 iCarousel...

gitblog_00037的博客 1204

iOS可以改变滚动方向的滚动轮播图

文章目录简介原理相关demo示例 简介 广告无限轮播图都很常见,创建三个UIImageView添加到就能达到无限轮播的效果(其实两张也可以,但是十分麻烦),本示例中有三种模式可以设定往左滚动,往右滚动,或者根据手动滑屏的方向随意改变其滚动的方向.并且不仅考虑到三张以上的图片轮播,也考虑了三张一下或者没有图片的情况. 原理 默认设置UIScrollView偏移量让中间的UIImageView展...

面壁者LOGIC 957

iOS之轮播图(collectionView)加定时器

今天为大家分享一波轮播图,本人不才,希望此分享对大家有用。今天为什么写这个呢,之前写过项目用scrollView封装写过轮播图,但是感觉不是很好,而且传值也很不好写,所以今天用collectionView写的轮播图,传值也很是好写的。 5517BA7A-0DE8-43B6-8C97-7BACA687416D.png 先定一些我们需要的属性 @property (nonatomic,

lqk的博客 1452

UI中如何用纯代码的方式来实现一个图片轮播器

图片轮播器 •实现思路:•1.添加UIScrollView•2.动态向UIScrollView中添加图片框(横向)•3.设置UIScrollView的contentSize实现滚动,实现横向滚动•4.实现分页•5.实现分页指示器UIPageControl•6.通过使用Nstimer实现自动滚动 1.动态创建imageView图片框...

dj1105601720的博客 255

iOS开发之多图片无缝滚动组件封装与使用

正儿八经的图片滚动的Demo我这儿还真没有,今天呢就封装一个可以在项目中直接使用的图片轮播。没看过其他iOS图片无限轮播的代码,也不了解他们的原理,我今天封装这个图片无限轮播是借鉴Web前端中的做法,因为之前写Web前端的时候,实现幻灯片就是这么做的,今天就在iPhone上搞搞。下面的东西是自己写的了,关于轮播的东西这个开源项目也是相当不错的h ttps://gi thub.com / nic

zhaohongyan6的博客 1109

iOS开发之collectionView实现无限轮播视图

运行效果:代码:头文件:#import static NSString *ID = @"bannerCell"; @class BannerView; @protocol BannerViewDelegate @optional - (void)bannerView:(BannerView *)bannerView didSelectedAtIndex:(NSInteger)nIndex

首字母大写-博客 1707
上一篇: snagit 如何对录取的视频进行剪切,剪切掉不需要的部分
下一篇: iOS 第13课 使用XIB可视化编辑界面
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值