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
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!