全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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 


相关文章: 做企业网站制作流程,企业网站制作基本流程有哪些?  建站与域名管理如何高效结合?  建站之星备案流程有哪些注意事项?  重庆市网站制作公司,重庆招聘网站哪个好?  定制建站是什么?如何实现个性化需求?  建站之星CMS五站合一模板配置与SEO优化指南  制作证书网站有哪些,全国城建培训中心证书查询官网?  如何在IIS中新建站点并解决端口绑定冲突?  深圳网站制作平台,深圳市做网站好的公司有哪些?  Python路径拼接规范_跨平台处理说明【指导】  如何在Golang中使用replace替换模块_指定本地或远程路径  宝塔面板创建网站无法访问?如何快速排查修复?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  网站制作服务平台,有什么网站可以发布本地服务信息?  如何用腾讯建站主机快速创建免费网站?  深入理解Android中的xmlns:tools属性  如何自定义建站之星模板颜色并下载新样式?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  c# 服务器GC和工作站GC的区别和设置  专业网站建设制作报价,网页设计制作要考什么证?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何在Tomcat中配置并部署网站项目?  黑客入侵网站服务器的常见手法有哪些?  IOS倒计时设置UIButton标题title的抖动问题  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  详解jQuery停止动画——stop()方法的使用  已有域名和空间,如何快速搭建网站?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  5种Android数据存储方式汇总  网站制作企业,网站的banner和导航栏是指什么?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  装修招标网站设计制作流程,装修招标流程?  公司网站制作价格怎么算,公司办个官网需要多少钱?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  XML的“混合内容”是什么 怎么用DTD或XSD定义  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  公司门户网站制作流程,华为官网怎么做?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  如何实现建站之星域名转发设置?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  定制建站流程解析:需求评估与SEO优化功能开发指南  建站主机解析:虚拟主机配置与服务器选择指南  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  北京网站制作网页,网站升级改版需要多久? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。