ScrollView广告轮播
来源:互联网 发布:vscode离线插件安装 编辑:程序博客网 时间:2024/05/18 00:36
<span style="background-color: rgb(102, 255, 255);">//// AdCollectionViewCell.m// LJEAdScrollview//// Created by xiaoyao on 15/4/2.// Copyright (c) 2015年 lijien. All rights reserved.////// AdCollectionViewCell.h// LJEAdScrollview//// Created by xiaoyao on 15/4/2.// Copyright (c) 2015年 lijien. All rights reserved.///** * @brief 自定义collectionViewCell,布局每一个广告的现实内容 * @author lijien */#import <UIKit/UIKit.h>@interface AdCollectionViewCell : UICollectionViewCell// 广告图@property (nonatomic, strong) UIImageView *adImageView;// 图片描述文字@property (nonatomic, copy) NSString *titleString;@end#import "AdCollectionViewCell.h"#import "UIView+UIViewExtension.h"@implementation AdCollectionViewCell { UILabel *_titleLabel;}- (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self layoutSubviews]; } return self;}- (void)setTitleString:(NSString *)titleString { _titleString = [titleString copy]; _titleLabel.text = [NSString stringWithFormat:@" %@",titleString];}- (void)layoutSubviews { self.adImageView = [[UIImageView alloc] initWithFrame:self.bounds]; CGFloat titleW = self.ad_width; CGFloat titleH = self.ad_height; CGFloat titleX = 0; CGFloat titleY = self.ad_height - titleH; _titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(titleX, titleY, titleW, titleH)]; _titleLabel.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]; _titleLabel.font = [UIFont systemFontOfSize:13]; _titleLabel.textColor = [UIColor whiteColor]; _titleLabel.hidden = !_titleLabel.text; [self addSubview:_adImageView]; [self addSubview:_titleLabel];}@end//// UIView+UIViewExtension.h// LJEAdScrollview//// Created by xiaoyao on 15/4/2.// Copyright (c) 2015年 lijien. All rights reserved.//#import <UIKit/UIKit.h>/** * @brief 每个广告图frame的坐标和宽高 */@interface UIView (UIViewExtension)@property (nonatomic, assign) CGFloat ad_X;@property (nonatomic, assign) CGFloat ad_Y;@property (nonatomic, assign) CGFloat ad_width;@property (nonatomic, assign) CGFloat ad_height;@end//// UIView+UIViewExtension.m// LJEAdScrollview//// Created by xiaoyao on 15/4/2.// Copyright (c) 2015年 lijien. All rights reserved.//#import "UIView+UIViewExtension.h"#import "AdScrollViewFrame.h"@implementation UIView (UIViewExtension)- (CGFloat)ad_X { return originX;}- (CGFloat)ad_Y { return originY;}- (CGFloat)ad_width { return adWidth;}- (CGFloat)ad_height { return adHeight;}- (void)setAd_X:(CGFloat)ad_X { CGRect temp = self.frame; temp.origin.x = ad_X; self.frame = temp;}- (void)setAd_Y:(CGFloat)ad_Y { CGRect temp = self.frame; temp.origin.y = ad_Y; self.frame = temp;}- (void)setAd_width:(CGFloat)ad_width { CGRect temp = self.frame; temp.size.width = ad_width; self.frame = temp;}- (void)setAd_height:(CGFloat)ad_height { CGRect temp = self.frame; temp.size.height = ad_height; self.frame = temp;}@end//// AdCycleScrollView.h// LJEAdScrollview//// Created by xiaoyao on 15/4/2.// Copyright (c) 2015年 lijien. All rights reserved.//#import <UIKit/UIKit.h>@class AdCycleScrollView;@protocol AdCycleScrollViewDelegate <NSObject>- (void)cycleScrollView:(AdCycleScrollView *)adScrollView didSelectAtIndex:(NSInteger)index;@end/** * @brief 每一个广告视图的布局 */@interface AdCycleScrollView : UIView// 图片数据源 @property (nonatomic, strong) NSArray *imageArray;// 标题数据源@property (nonatomic, strong) NSArray *titleArray;// 时间间隔@property (nonatomic, assign) CGFloat autoScrollItemTimeInterval;@property (nonatomic, assign) NSInteger currentPageIndex;@property (nonatomic, weak) id<AdCycleScrollViewDelegate>delegate;/** * @brief 外部初始化显示广告图的每个collectionView */+ (instancetype)cycleScrollViewWithFrame:(CGRect)frame imagesGroupArray:(NSArray *)imagesArray titleArray:(NSArray *)titleArray;@end//// AdCycleScrollView.m// LJEAdScrollview//// Created by xiaoyao on 15/4/2.// Copyright (c) 2015年 lijien. All rights reserved.//#import "AdCycleScrollView.h"#import "AdCollectionViewCell.h"#import "UIView+UIViewExtension.h"NSString * const cycleKey = @"cycleKey";@interface AdCycleScrollView () <UICollectionViewDataSource, UICollectionViewDelegate> { UICollectionView *_mainCollectionView; UICollectionViewFlowLayout *_flowLayout; NSTimer *_timer; NSInteger _totalItemCount; UIPageControl *_pageControl;}@end@implementation AdCycleScrollView- (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self layoutMainView]; } return self;}+ (instancetype)cycleScrollViewWithFrame:(CGRect)frame imagesGroupArray:(NSArray *)imagesArray titleArray:(NSArray *)titleArray { AdCycleScrollView *scroll = [[AdCycleScrollView alloc] initWithFrame:frame]; scroll.imageArray = imagesArray; scroll.titleArray = titleArray; return scroll;}/** * @beief 设置图片collectionView,以及进行线性布局 */- (void)layoutMainView { // collectionView的布局 _flowLayout = [[UICollectionViewFlowLayout alloc] init]; // 设定全局的cell的frame.size _flowLayout.itemSize = self.frame.size; // 设定全局的行间距 _flowLayout.minimumLineSpacing = 0; _flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; _mainCollectionView = [[UICollectionView alloc] initWithFrame:self.frame collectionViewLayout:_flowLayout]; _mainCollectionView.backgroundColor = [UIColor lightGrayColor]; _mainCollectionView.pagingEnabled = YES; _mainCollectionView.showsHorizontalScrollIndicator = NO; _mainCollectionView.showsVerticalScrollIndicator = NO; // 取消缩放 _mainCollectionView.bouncesZoom = NO; // 取消反弹 _mainCollectionView.bounces = NO; _mainCollectionView.delegate = self; _mainCollectionView.dataSource = self; [_mainCollectionView registerClass:[AdCollectionViewCell class] forCellWithReuseIdentifier:cycleKey]; [self addSubview:_mainCollectionView]; _autoScrollItemTimeInterval = 1.0;// _pageControl = [UIPageControl alloc] initWithFrame:CGRectMake(<#CGFloat x#>, <#CGFloat y#>, <#CGFloat width#>, <#CGFloat height#>)}- (void)setImagesGroup:(NSArray *)imagesGroup{ _imageArray = imagesGroup; [self setupTimer];}/** * @brief 设置定时器 */- (void)setupTimer { _timer = [NSTimer scheduledTimerWithTimeInterval:self.autoScrollItemTimeInterval target:self selector:@selector(automatiocScroll:) userInfo:nil repeats:YES]; // 使用scheduledTimerWithTimeInterval添加到Run Loop中的Timer就不会执行,所以用NSRunLoopCommonModes [[NSRunLoop mainRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];}- (void)setAutoScrollItemTimeInterval:(CGFloat)autoScrollItemTimeInterval { _autoScrollItemTimeInterval = autoScrollItemTimeInterval; [_timer invalidate]; _timer = nil; [self setupTimer];}- (void)automatiocScroll:(NSTimer *)timer { self.currentPageIndex = _mainCollectionView.contentOffset.x / _flowLayout.itemSize.width; NSInteger targetPageIndex = self.currentPageIndex + 1; if (targetPageIndex == self.imageArray.count) { targetPageIndex = self.imageArray.count * 0.5; [_mainCollectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:targetPageIndex inSection:0] atScrollPosition:UICollectionViewScrollPositionNone animated:YES]; } [_mainCollectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:targetPageIndex inSection:0] atScrollPosition:UICollectionViewScrollPositionNone animated:YES];}#pragma mark - UICollectionViewDataSource//- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {// return self.imageArray.count;//}- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return self.imageArray.count;}- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { AdCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cycleKey forIndexPath:indexPath]; if (!cell) { cell = [[AdCollectionViewCell alloc] init]; } NSUInteger itemIndex = indexPath.item % self.imageArray.count; if (self.imageArray.count) { cell.adImageView.image = self.imageArray[itemIndex]; } if (self.titleArray.count) { cell.titleString = _titleArray[itemIndex]; } return cell;}- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { if ([self.delegate respondsToSelector:@selector(cycleScrollView:didSelectAtIndex:)]) { [self.delegate cycleScrollView:self didSelectAtIndex:indexPath.item % self.imageArray.count]; }}#pragma mark - UIScrollviewDelegate- (void)scrollViewDidScroll:(UIScrollView *)scrollView { NSUInteger index = (scrollView.contentOffset.x + _mainCollectionView.ad_width * 0.5) / _mainCollectionView.ad_width; _pageControl.currentPage = index % self.imageArray.count;}- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { [_timer invalidate]; _timer = nil;}- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { [self setupTimer];}@end//// AdScrollViewController.m// LJEAdScrollview//// Created by xiaoyao on 15/4/3.// Copyright (c) 2015年 lijien. All rights reserved.//#import "AdScrollViewController.h"#import "UIView+UIViewExtension.h"@interface AdScrollViewController () <AdCycleScrollViewDelegate>@end@implementation AdScrollViewController- (void)viewDidLoad { [super viewDidLoad]; NSArray *images = @[[UIImage imageNamed:@"h1.jpg"], [UIImage imageNamed:@"h2.jpg"], [UIImage imageNamed:@"h3.jpg"], [UIImage imageNamed:@"h4.jpg"] ]; NSArray *titles = @[@"我的梦想是做一名伟大的产品设计师", @"我的目标是张小龙一样开世界微信产品发布会", @"我可以有丰富多彩的生活除了编程之外", @"谢谢各位,尽情吐槽" ]; AdCycleScrollView *scroll = [AdCycleScrollView cycleScrollViewWithFrame:CGRectMake(0, 60, self.view.frame.size.width, 180) imagesGroupArray:images titleArray:titles]; scroll.titleArray = titles; scroll.delegate = self; [self.view addSubview:scroll];}#pragma mark - SDCycleScrollViewDelegate- (void)cycleScrollView:(AdCycleScrollView *)adScrollView didSelectAtIndex:(NSInteger)index{ NSLog(@"---点击了第%ld张图片", index);}@end</span>
0 0
- scrollView广告轮播
- ScrollView广告轮播
- scrollView轮播
- 广告轮播效果
- jquery 广告轮播
- IOS 轮播广告
- iOS 广告轮播
- 广告轮播
- 广告轮播
- 广告轮播功能
- 轮播广告-imageslider
- 广告轮播
- 广告轮播Banner
- Android轮播广告
- 自定义广告轮播
- js轮播广告
- Android广告轮播
- 广告轮播
- 通过UltraEdit(UE)转化\r\n(回车换行)与\n(换行)
- LeetCode 之 House Robber
- 由errno到linux的tls实现机制
- objc_msgSend函数
- Josephus问题递归解法
- ScrollView广告轮播
- 关于动态库和静态库的问题
- Struts 表单中name含有点号 jQuery选择器选择不到 解决
- 敏捷开发理解
- asp.net mvc4 使用KindEditor文本编辑器
- linux 内核 编译过程
- html中的列布局
- UDP丢包原因
- wince 电源管理一些宏的值