Bison教你1分钟集成3D无限翻转的Banner

gift.png 这是一个很炫的广告轮播功能,很多APP都有这个功能,比如说礼物说 还有几个忘记名字了。。。 在这里给大家简单的讲下该功能是怎么实现的 首先是定义一下基本的控件,代码如下

- (void)show3DBannerView{
    
    _imageArr = @[@"0.jpg",@"1.jpg",@"2.jpg",@"3.jpg",@"4.jpg",@"5.jpg"];
    //定义图片控件
    _imageView=[[UIImageView alloc]init];
    _imageView.frame= CGRectMake(0, 0, MainScreenW, 180);
    _imageView.contentMode=UIViewContentModeScaleAspectFit;
    
    _imageView.image=[UIImage imageNamed:_imageArr[0]];//默认图片
    _imageView.userInteractionEnabled = YES;
    self.userInteractionEnabled = YES;
    [self addSubview:_imageView];
    _imageView.tag = 10;
     //默认点击第一张
    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(doDoubleTap:)];
    [_imageView addGestureRecognizer:doubleTap];
    
    //添加手势
    UISwipeGestureRecognizer *leftSwipeGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(leftSwipe:)];
    leftSwipeGesture.direction=UISwipeGestureRecognizerDirectionLeft;
    [self addGestureRecognizer:leftSwipeGesture];
    
    UISwipeGestureRecognizer *rightSwipeGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(rightSwipe:)];
    rightSwipeGesture.direction=UISwipeGestureRecognizerDirectionRight;
    [self addGestureRecognizer:rightSwipeGesture];
}

然后实现各手势的方法

#pragma mark 向左滑动浏览下一张图片
-(void)leftSwipe:(UISwipeGestureRecognizer *)gesture{
    [self transitionAnimation:YES];
}

#pragma mark 向右滑动浏览上一张图片
-(void)rightSwipe:(UISwipeGestureRecognizer *)gesture{
    [self transitionAnimation:NO];
}

下面到了我们该实现3D的转场动画了的时候了

#pragma mark 转场动画
-(void)transitionAnimation:(BOOL)isNext{
    //1.创建转场动画对象
    CATransition *transition=[[CATransition alloc]init];
    
    //2.设置动画类型,注意对于苹果官方没公开的动画类型只能使用字符串,并没有对应的常量定义
    transition.type=@"cube";
    
    //设置子类型
    if (isNext) {
        transition.subtype=kCATransitionFromRight;
    }else{
        transition.subtype=kCATransitionFromLeft;
    }
    //设置动画时常
    transition.duration=1.0f;
    
    //3.设置转场后的新视图添加转场动画
    _imageView.image=[self getImage:isNext];
    [_imageView.layer addAnimation:transition forKey:@"KCTransitionAnimation"];
}

是不是还觉得缺了什么啊?Banner怎么可能少的了图片呢? 下面是获取图片的方法

#pragma mark 取得当前图片
-(UIImage *)getImage:(BOOL)isNext{
    if (isNext) {
        _currentIndex=(_currentIndex+1)%_imageArr.count;
    }else{
        _currentIndex=(_currentIndex-1+_imageArr.count)%(int)_imageArr.count;
    }
    NSString *imageName = _imageArr[_currentIndex];
    
    
    _imageView.tag = _currentIndex+10;
    //增加点击手势
    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(doDoubleTap:)];
    
    [_imageView addGestureRecognizer:doubleTap];
    
    
    return [UIImage imageNamed:imageName];
}

点击图片触发事件

- (void)doDoubleTap:(UITapGestureRecognizer*)gesture
{
    
      [_delegate ClickImg:(int)gesture.view.tag];
}

集成方法

导入头文件#import "SayGift_3DBanner_View.h"

SayGift_3DBanner_View文件拉进自己的工程

实现ClickImgDelegate代理

- (void)viewDidLoad {
    [super viewDidLoad];
    SayGift_3DBanner_View *Banner_View = [[SayGift_3DBanner_View alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 180)];
    Banner_View.delegate = self;
    [Banner_View show3DBannerView];
    [self.view addSubview:Banner_View];

}
//点击了第几张图片
- (void)ClickImg:(int)index{
     NSLog(@"点击了第%d张",index);
}

PS

由于转场的动画使用的是系统的私有API,所以不能用在需要上架的APP里面哦!有点遗憾哈.......想到了一个方法貌似可以绕过苹果的检测上传,感觉还可以实行的样子

Demo下载地址:https://github.com/AllLuckly/SayGift_3DAdvertisement

最后我把效果图贴出来给大家看看

3D.gif

好文推荐:Bison教你3分钟集成支付宝好友分享

更多经验请点击

如对你有帮助,请不要吝惜你的star和喜欢哦!

技术交流群:534926022(免费) 511040024(0.8/人付费)

推荐一款学习iOS开发的app_____|______| | 传送门 原文在:http://www.allluckly.cn/ 版权归©Bison所有 如需转载请保留原文超链接地址!否则后果自负!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏何俊林

Android开发之贝塞尔曲线进阶篇(仿直播送礼物,饿了么购物车动画)

今天来自李晨玮分享的直播礼物效果Demo。对于直播中送车,点赞都有借鉴意义。李晨玮的简书为:http://www.jianshu.com/u/b2df0a5ea...

3808
来自专栏蜉蝣禅修之道

android获取textview展开渲染后的高度

1134
来自专栏非著名程序员

Android自定义 View 实战之 StickerView

本篇文章为利用Matrix自定义View三部曲的第一部曲。 虽然Android内置了许多View供开发者组合和使用,但其多样性还是不足,在很多场景或功能需求下...

1999
来自专栏一“技”之长

玩转iOS转场动画 原

    关于动画在iOS开发中的应用,曾经整理过一系列的博客进行总结。包括简单的UIView层的动画,CALayer层的动画,Autolayout自动布局动画以...

1065
来自专栏刘望舒

Android 屏幕适配从未如此简单

一个月前看了今日头条新的屏幕适配方案,对此不禁拍案叫绝,为此我想把这种方案融入到我工具类中直接一行代码即可适配,如今最新 1.18.0 版 AndroidUti...

812
来自专栏freesan44

iOS中一些WebView与JS交互的JS语句

NSString * HTMLSource =  @"document.body.innerHTML";

622
来自专栏张善友的专栏

Entity Framework Feature CTP 5系列文章

12月份发布了Entity Framework Feature CTP 5,这也是最后一个CTP版本了,明确了RTM的发布时间是2011年Q1,CTP5主要是加...

2086
来自专栏Android开发小工

自定义View基础(二)View的滑动

在移动设备上,滑动基本是基础特性。不管是用的最多的下拉刷新还是ViewPager,他们的基础都是滑动。View的滑动实现方法也是绚丽的自定义View的基础知识。

562
来自专栏菩提树下的杨过

浏览器窗口尺寸改变时的图片自动重新定位

俗话说:拳不离手,曲不离口。学过的技能不用,放长了就生疏了,今天以前的同事问我:用户改变浏览器窗口尺寸时,flash中的图片如何重新定位于4个角上。花了近一刻钟...

1939
来自专栏青蛙要fly的专栏

图片操作系列 —(2)手势旋转图片

在上次的文章:图片操作系列 —(1)手势缩放图片功能中,我们已经学会了如何用手势来对图片进行缩放。这次我们继续来看第二个操作,那就是如何用手势来旋转图片。

1374

扫码关注云+社区