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

回到顶部