IOS 开发之网络图片轮播图的实现

截图
1.使用
LJPhotoGroupView *_ljPhotoGroupView = [[LJPhotoGroupView alloc]initWithItem:self.ljUrlArray]; _ljPhotoGroupView.backgroundColor = [UIColor blackColor]; _ljPhotoGroupView.frame = CGRectMake(0, 0, kDEVICEWIDTH, kDEVICEHEIGHT); [_ljPhotoGroupView showHintView:self];
2.源码
#import "LJPhotoGroupView.h"
#import "LJWebIDataManager.h"
@interface LJPhotoGroupCellView()
@property (nonatomic, strong) UIImageView *ljImageview;
@end
@implementation LJPhotoGroupCellView
- (instancetype)initWithFrame:(CGRect)frame url:(NSString*)imageurl
{
self = [super initWithFrame:frame];
if (self) {
[self addSubview:self.ljImageview];
//这里大家可以换成自己的网络请求图片的方法
[[LJWebIDataManager sharedInstances]retrieveData:imageurl successBlock:^(NSData *netData, NSString *progressStr, BOOL isFinished) {
//在主线程中刷新界面
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *_ljImage = [UIImage imageWithData: netData scale:0.3];
@myWeakify(self);
dispatch_async(dispatch_get_main_queue(), ^{
@myStrongify(self);
self.ljImageview.image = _ljImage;
});
});
}];
}
return self;
}
- (UIImageView*)ljImageview
{
if (!_ljImageview) {
_ljImageview = UIImageView.new;
_ljImageview.frame = CGRectMake(15, 0, kDEVICEWIDTH - 30, 130);
_ljImageview.backgroundColor = [UIColor redColor];
UIGestureRecognizer *_tap = [[UIGestureRecognizer alloc]initWithTarget:self action:@selector(dismissHintView)];
[_ljImageview addGestureRecognizer:_tap];
}
return _ljImageview;
}
@end
@interface LJPhotoGroupView()<UIScrollViewDelegate>
@property (nonatomic, strong) UIScrollView *ljScrollView;
@property (nonatomic, strong) NSArray *ljItemArray;
@property (nonatomic, strong) UIImageView *ljImageview;
@property (nonatomic, strong) UIPageControl *ljPageControl;
@end
@implementation LJPhotoGroupView
- (instancetype)initWithItem:(NSArray*)ljArray
{
self = [super init];
if (self)
{
self.ljItemArray = [NSArray arrayWithArray:ljArray];
[self addSubview:self.ljScrollView];
[self addSubview:self.ljPageControl];
for (int i = 0; i < self.ljItemArray.count; i++) {
//方法一:直接设置每个cell的X坐标
// LJPhotoGroupCellView *_cell = [[LJPhotoGroupCellView alloc]initWithFrame:CGRectMake((kDEVICEWIDTH )*i, 0, kDEVICEWIDTH, 130) url:self.ljItemArray[i]];
//方法二:先不用考虑cell的X坐标,在下面设置X的坐标
LJPhotoGroupCellView *cell = [[LJPhotoGroupCellView alloc]initWithFrame:self.ljScrollView.bounds url:self.ljItemArray[i]];
UITapGestureRecognizer *_tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(dismissHintView)];
[cell addGestureRecognizer:_tap];
[self.ljScrollView addSubview:cell];
}
//方法二:设置cell的X坐标
// 计算imageView的位置
[self.ljScrollView.subviews enumerateObjectsUsingBlock:^(LJPhotoGroupCellView *cell, NSUInteger idx, BOOL *stop)
{
// 调整x => origin => frame
CGRect frame = cell.frame;
frame.origin.x = idx * frame.size.width;
cell.frame = frame;
}];
self.ljPageControl.currentPage = 0;
}
return self;
}
- (UIScrollView*)ljScrollView
{
if (!_ljScrollView)
{
_ljScrollView = UIScrollView.new;
_ljScrollView.frame = CGRectMake(0, 250, kDEVICEWIDTH, 130);
_ljScrollView.delegate = self;
//_scrollView.scrollsToTop = NO;
_ljScrollView.pagingEnabled = YES;
_ljScrollView.contentSize = CGSizeMake(_ljScrollView.bounds.size.width * self.ljItemArray.count, 130);
//_scrollView.alwaysBounceHorizontal = groupItems.count > 1;
// _scrollView.showsHorizontalScrollIndicator = NO;
//_scrollView.showsVerticalScrollIndicator = NO;
//_scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
//_scrollView.delaysContentTouches = NO;
//_scrollView.canCancelContentTouches = YES;
}
return _ljScrollView;
}
- (UIPageControl *)ljPageControl
{
if (_ljPageControl == nil)
{
// 分页控件,本质上和scrollView没有任何关系,是两个独立的控件
_ljPageControl = [[UIPageControl alloc] init];
// 总页数
_ljPageControl.numberOfPages = self.ljItemArray.count;
CGSize size = [_ljPageControl sizeForNumberOfPages:self.ljItemArray.count];
_ljPageControl.bounds = CGRectMake(0, 0, size.width, size.height);
_ljPageControl.center = CGPointMake(self.center.x, 380);
// 设置颜色
_ljPageControl.pageIndicatorTintColor = [UIColor redColor];
//当前页面的颜色
_ljPageControl.currentPageIndicatorTintColor = [UIColor whiteColor];
[_ljPageControl addTarget:self action:@selector(pageChanged:) forControlEvents:UIControlEventValueChanged];
}
return _ljPageControl;
}
// 分页控件的监听方法
- (void)pageChanged:(UIPageControl *)page
{
NSLog(@"%ld", (long)page.currentPage);
// 根据页数,调整滚动视图中的图片位置 contentOffset self.scrollView.bounds.size.width
CGFloat x = page.currentPage * (kDEVICEWIDTH);
[self.ljScrollView setContentOffset:CGPointMake(x, 0) animated:YES];
}
- (UIImageView*)ljImageview
{
if (!_ljImageview) {
_ljImageview = UIImageView.new;
_ljImageview.frame = CGRectMake(0, 0, kDEVICEWIDTH, kDEVICEHEIGHT);
_ljImageview.backgroundColor = [UIColor redColor];
UIGestureRecognizer *_tap = [[UIGestureRecognizer alloc]initWithTarget:self action:@selector(dismissHintView)];
[_ljImageview addGestureRecognizer:_tap];
}
return _ljImageview;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
//CGFloat floatPage = _scrollView.contentOffset.x / _scrollView.width;
//NSInteger page = _scrollView.contentOffset.x / _scrollView.width;
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
if (!decelerate) {
}
}
#pragma mark - ScrollView的代理方法
// 滚动视图停下来,修改页面控件的小点(页数)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
// 停下来的当前页数
NSLog(@"%@", NSStringFromCGPoint(scrollView.contentOffset));
// 计算页数
int page = scrollView.contentOffset.x / scrollView.bounds.size.width;
self.ljPageControl.currentPage = page;
}
- (void)showHintView:(UIView*)view
{
//[view addSubview:self];
[[UIApplication sharedApplication].delegate.window.rootViewController.view addSubview:self];
self.alpha = 0.0;
[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
self.alpha = 1.0;
} completion:^(BOOL finished)
{
}];
}
- (void)dismissHintView
{
[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
self.alpha = 0.0;
} completion:^(BOOL finished){
[self removeFromSuperview];
}];
}
@end
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# IOS
# 轮播图
# 轮播图的实现
# 网路轮播图的简单实现
# 两行IOS代码实现轮播图
# iOS实现无限循环轮播图效果
# iOS使用UIScrollView实现无限循环轮播图效果
# iOS实现带有缩放效果的自动轮播图
# iOS实现轮播图banner示例
# iOS简单实现轮播图效果
# 分页
# 停下来
# 自己的
# 如有
# 没有任何
# 希望能
# 谢谢大家
# 本质上
# 疑问请
# myWeakify
# dispatch_get_main_queue
# _ljImageview
# return
# myStrongify
# image
# scale
# isFinished
# dispatch_async
# progressStr
# BOOL
相关文章:
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
高端建站如何打造兼具美学与转化的品牌官网?
如何挑选最适合建站的高性能VPS主机?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
平台云上自助建站如何快速打造专业网站?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
制作网站的基本流程,设计网站的软件是什么?
如何彻底删除建站之星生成的Banner?
如何做网站制作流程,*游戏网站怎么搭建?
Python lxml的etree和ElementTree有什么区别
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
如何基于PHP生成高效IDC网络公司建站源码?
如何获取上海专业网站定制建站电话?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
高性能网站服务器配置指南:安全稳定与高效建站核心方案
建站之星2.7模板:企业网站建设与h5定制设计专题
如何快速查询域名建站关键信息?
如何快速完成中国万网建站详细流程?
为什么Go需要go mod文件_Go go mod文件作用说明
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
如何快速生成凡客建站的专业级图册?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
如何在Tomcat中配置并部署网站项目?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
建站为何优先选择香港服务器?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
北京企业网站设计制作公司,北京铁路集团官方网站?
C#如何使用XPathNavigator高效查询XML
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
制作宣传网站的软件,小红书可以宣传网站吗?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
建站之星北京办公室:智能建站系统与小程序生成方案解析
,石家庄四十八中学官网?
如何通过宝塔面板实现本地网站访问?
如何在IIS7上新建站点并设置安全权限?
山东云建站价格为何差异显著?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
存储型VPS适合搭建中小型网站吗?
如何在腾讯云免费申请建站?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
*请认真填写需求信息,我们会在24小时内与您取得联系。