首页 > 系统 > iOS > 正文

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

2020-02-19 15:45:25
字体:
来源:转载
供稿:网友

我们在开发中经常需要开发广告转盘图,我们只需要使用可以实现无限循环的功能即可,下面武林技术频道小编整理了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 开发之网络图片轮播图的实现,你觉得可以吗?如果你有更好的操作方法,也可以在评论下留言哦!
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表