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, span) 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, span) UIScrollView *ljScrollView;
@property (nonatomic, span) NSArray *ljItemArray;
@property (nonatomic, span) UIImageView *ljImageview;
@property (nonatomic, span) 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 开发之网络图片轮播图的实现 的全部内容, 来源链接: utcz.com/z/319534.html