iOS 广告轮播图的实现与封装
来源:互联网 发布:乐乎lofter4.9.0 编辑:程序博客网 时间:2024/05/16 14:00
轮播视图的BannerView.h文件
#import <UIKit/UIKit.h>
@class BannerModel;
@interface BannerView : UIView
@property (nonatomic ,copy)void (^tapModelsBlock)(BannerModel *bm);
-(void)setBannerView:(NSMutableArray *)models;
@end
轮播视图的BannerView.m文件 .xib文件的设置请看屏幕快照主要是创建了一个轮播图的模板,主要是UIView(根视图)-->UIscrollView(上下左右layout设置为0)、UIPageControl(底部)-->bgView(UIscrollView的子视图,上下左右为0,等高,宽度拖线[@property (weak, nonatomic) IBOutlet NSLayoutConstraint *bgWidth;],总共6个限制)
#import "BannerView.h"
#import "BannerModel.h"
#import "Button.h"
#import "UIImageView+WebCache.h"
@interface BannerView ()<UIScrollViewDelegate>
@property (weak,nonatomic)IBOutletUIScrollView *scrollView;
@property (weak,nonatomic)IBOutletNSLayoutConstraint *bgWidth;
@property (weak,nonatomic)IBOutletUIView *bgView;
@property (assign ,nonatomic)NSInteger index;
@property (assign ,nonatomic)NSInteger models_Count;
@property (weak,nonatomic)IBOutletUIPageControl *pageControl;
@property (nonatomic ,strong)NSMutableArray *currentModels;
@property (strong,nonatomic)NSTimer *timer;
@end
@implementation BannerView
-(void)awakeFromNib{
// [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceChange:) name:UIDeviceOrientationDidChangeNotification object:nil];
self.scrollView.delegate =self;
self.scrollView.pagingEnabled = YES;
self.scrollView.showsVerticalScrollIndicator = NO;
self.scrollView.showsHorizontalScrollIndicator = NO;
self.scrollView.bounces =NO;
}
#pragma mark - 自动滚动广告页面方法
-(void)autoScroll:(NSTimer *)timer{
// NSLog(@"自动翻转当前页:::::::::--->%ld",_index+1);
if (_index ==_models_Count -1) {
_index =0;
}else{
_index ++;
}
_pageControl.currentPage =_index;
[UIViewanimateWithDuration:0.5animations:^{
[self.scrollViewsetContentOffset:CGPointMake(_index *APPW, 0)];
}];
}
//#pragma mark - 设备横竖屏改变
//-(void)deviceChange:(NSNotification *)notice{
//
//// NSLog(@"%@",notice);
//// UIDeviceOrientation orient = [UIDevice currentDevice].orientation;
//
// [self.scrollView setContentOffset:CGPointMake(_index * APPW, 0) animated:YES];
// //横竖屏时,——bgView的宽度也要跟着变化,重新设定
// _bgWidth.constant = _models_Count * APPW;
//
//// [_buttonView setFrame:CGRectMake(0, 0, Screen_W, 75)];
//
//// NSLog(@"屏幕宽度---->%lf",Screen_W);
//
//
//
//}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;{
/****暂停定时器****/
// [_timer setFireDate:[NSDate distantFuture]];
[selfcloseTimer];
}
#pragma mark - 滑动视图滑动结束代理
- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
self.index = scrollView.contentOffset.x /APPW;
// NSLog(@"当前页--->%ld",_index+1);
[self.scrollViewsetContentOffset:CGPointMake(_index *APPW, 0)];
_pageControl.currentPage =_index;
/****打开定时器****/
// [_timer setFireDate:[NSDate distantPast]];
[selfopenTimer];
}
#pragma mark - 滚动广告设置这个方法可以供外界调用,主要用于传递轮播图的url地址与其他信息
-(void)setBannerView:(NSMutableArray *)models{
_bgWidth.constant = models.count *APPW;
self.scrollView.contentSize =CGSizeMake(models.count,0);
_currentModels = (NSMutableArray *)models;
_pageControl.numberOfPages = models.count;
_models_Count = models.count;
NSLog(@"图片数---->%ld",models.count);
// 移除_bgView上所有imageView的子控件
for (UIImageView *imvin_bgView.subviews) {
if([imvisKindOfClass:[UIImageViewclass]]){
[imv removeFromSuperview];
}
}
if (models.count ==0) {
UIImageView *imageView = [[UIImageViewalloc]init];
[_bgViewaddSubview:imageView];
[imageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.height.width.equalTo(self.scrollView);
make.leading.equalTo(self.scrollView);
}];
[imageView setImage:[UIImageimageNamed:@"DNF"]];
return;
}
for(int i =0;i < models.count;i ++){
UIImageView *lastView =_bgView.subviews.lastObject;
UIImageView *imageView = [[UIImageViewalloc]init];
[_bgViewaddSubview:imageView];
[imageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.height.width.equalTo(self.scrollView);
if (i ==0) {
make.leading.equalTo(self.scrollView);
}else{
make.leading.equalTo(lastView.mas_trailing);
}
}];
BannerModel *currentBM = models[i];
NSURL *url = [NSURLURLWithString:currentBM.indexBanner];
[imageView sd_setImageWithURL:urlplaceholderImage:[UIImageimageNamed:@"DNF"]];
UITapGestureRecognizer *tap = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(imageTapAction:)];
[imageView setUserInteractionEnabled:YES];
[imageView addGestureRecognizer:tap];
}
[selfopenTimer];
}
-(void)openTimer{
//广告循环播放
_timer = [NSTimerscheduledTimerWithTimeInterval:5.0target:selfselector:@selector(autoScroll:)userInfo:nilrepeats:YES];
}
-(void)closeTimer{
[_timerinvalidate];
_timer =nil;
}
#pragma mark - 图片点击事件
-(void)imageTapAction:(UITapGestureRecognizer *)tap{
BannerModel *bm =_currentModels[_index];
self.tapModelsBlock(bm);
}
#pragma mark - 首页广告
BannerView *bannerView = [[[NSBundlemainBundle]loadNibNamed:@"BannerView"owner:niloptions:nil]firstObject];
_bannerView = bannerView;
[_headViewaddSubview:bannerView];
点击事件的block回调
_bannerView.tapModelsBlock = ^(BannerModel *model){
NSLog(@"点击广告页");
};
[bannerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.leading.trailing.equalTo(_headView);
make.height.equalTo(@200);
}];
// 广告页网络请求
[selfrequestHeadView];
#pragma mark - 网络请求首页广告,建立模型最后调用bannerView的-(void)setBannerView:(NSMutableArray *)models这个方法,网络请求类请用自己熟悉的或AFNetworking,这一步主要是拿到数据建立模型,最后调用方法
-(void)requestHeadView{
[HYBNetworkingpostWithUrl:KshowBannerparams:nilsuccess:^(id response) {
NSLog(@"请求成功---%@",response);
if ([response[@"code"]integerValue]==0) {
NSMutableArray *bannerArr = [NSMutableArrayarray];
for (NSDictionary *dicin response[@"jsonObj"]) {
BannerModel *model = [[BannerModelalloc]initWithDic:dic];
[bannerArr addObject:model];
}
[_bannerViewsetBannerView:bannerArr];
}else{
MMPopupItem *item1 =MMItemMake(@"返回",MMItemTypeNormal, ^(NSInteger index) {
});
MMAlertView *alertView = [[MMAlertViewalloc]initWithTitle:@"错误提示"detail:response[@"msg"]items:@[item1]];
[alertView show];
}
} fail:^(NSError *error) {
[selfrequestNetWorkingFailAlert];
}];
}
- iOS 广告轮播图的实现与封装
- iOS 广告轮播图的实现
- iOS 饼状图的封装与实现
- IOS实现自动循环滚动广告--ScrollView的优化和封装
- IOS实现自动循环滚动广告--ScrollView的优化和封装
- iOS 典型广告轮播图效果的实现代码
- IOS Iphone版广告移动的类(封装好了,所有页面共用一个广告)
- IOS广告移动的类(封装好了,所有页面共用一个广告)
- 对iOS的UIWebView的封装,实现与html5的交互
- iOS组件封装的思路和实现
- iOS 饼图的实现封装
- iOS图片选择的优化与封装
- iOS 开机广告页面实现
- IOS开发之电子菜单的设计与实现(继承、封装、多态)
- iOS 启动页加入动态的广告实现
- IOS控件系列---文本上下滚动的标签实现广告
- iOS轮播图广告图
- iOS 广告轮播图
- switc—case 语句
- IK Analyzer 类图关系
- MySQL数据的主从复制、半同步复制和主主复制详解
- C#读取XML文件,反序列化为指定对象
- spring mvc拦截器和<mvc:annotation-driven />的详解
- iOS 广告轮播图的实现与封装
- tjut 3538
- VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
- HTTP状态码
- Binary Tree Level Order Traversal 1+2
- JAVA AES字符串解密算法可读取文件
- 一些总结
- 从无到有开发连麦直播技术点整理-AnyRTC
- java操作数据库(JDBC)