3d效果轮播图 ios_ios 3d轮播图 - CSDN
精华内容
参与话题
  • iOS 3D卡片式轮播

    万次阅读 2018-07-24 14:37:26
    支持五险轮播,可以加载本地图片,也可以加载网络图片,可以根据自己的需求自定义 UITableViewDelegate /** * 当前显示cell的Size(中间页显示大小) * * @param flowView <#flowView de...

    效果:
    这里写图片描述

    参考UITableView的UITableViewDataSource和UITableViewDelegate两个方法实现;支持五险轮播,可以加载本地图片,也可以加载网络图片,可以根据自己的需求自定义
    Demo地址

    UITableViewDelegate

    /**
     *  当前显示cell的Size(中间页显示大小)
     *
     *  @param flowView <#flowView description#>
     *
     *  @return <#return value description#>
     */
    - (CGSize)sizeForPageInFlowView:(HQFlowView *)flowView;
    
    /**
     *  滚动到了某一列
     *
     *  @param pageNumber <#pageNumber description#>
     *  @param flowView   <#flowView description#>
     */
    - (void)didScrollToPage:(NSInteger)pageNumber inFlowView:(HQFlowView *)flowView;
    
    /**
     *  点击了第几个cell
     *
     *  @param subView 点击的控件
     *  @param subIndex    点击控件的index
     *
     *  @return <#return value description#>
     */
    - (void)didSelectCell:(HQIndexBannerSubview *)subView withSubViewIndex:(NSInteger)subIndex;

    UITableViewDataSource

    /**
     *  返回显示View的个数
     *
     *  @param flowView <#flowView description#>
     *
     *  @return <#return value description#>
     */
    - (NSInteger)numberOfPagesInFlowView:(HQFlowView *)flowView;
    
    /**
     *  给某一列设置属性
     *
     *  @param flowView <#flowView description#>
     *  @param index    <#index description#>
     *
     *  @return <#return value description#>
     */
    - (HQIndexBannerSubview *)flowView:(HQFlowView *)flowView cellForPageAtIndex:(NSInteger)index;
    展开全文
  • ios-3D轮播图.zip

    2020-07-30 23:33:19
    使用iCarousel开源项目进行3D轮播图转换效果
  • 整天逛淘宝,偶尔有一天看到其中的展示页有个看起来很炫的效果,闲来无事就试着写一个出来,先来看效果:简单记一下思路,这里我选择使用UICollectionView控件,先根据其复用和滚动的特性做出无限轮播效果,关键...

    整天逛淘宝,偶尔有一天看到其中的展示页有个看起来很炫的效果,闲来无事就试着写一个出来,先来看效果:

    简单记一下思路,这里我选择使用UICollectionView控件,先根据其复用和滚动的特性做出无限轮播的效果,关键代码:

    //数据源数组
        let totalCount = 100
        var models: [String] = [String]() {
            didSet {
                //判断元素个数
                if models.count < 2 {
                    collectionView.isScrollEnabled = false
                }
                //网上的找来的一个办法添加100组数据源对应的索引数组indexArr
                for _ in 0..<totalCount {
                    for j in 0..<models.count {
                        indexArr.append(j)
                    }
                }
                //开始就滚动到第50组数据源
                collectionView.scrollToItem(at: IndexPath(item: totalCount/2 * models.count, section: 0), at: .centeredHorizontally, animated: false)
            }
        }

    滚动停止时走的方法里做处理:

    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
            //找到滚动停止的点对应的collectionView的indexPath
            let point =  self.convert(collectionView.center, to: collectionView)
            let index = collectionView.indexPathForItem(at: point)
            let indexpath = (index?.row ?? 0) % models.count
            
            collectionView.scrollToItem(at: IndexPath(item: totalCount/2 * models.count + indexpath, section: 0), at: .centeredHorizontally, animated: false)
        }
    以上是滚动的处理,接下来就是item的渐变效果处理,看到这种情况就想到要写一个UICollectionViewFlowLayout
    类供collectionView使用,UICollectionViewFlowLayout是管理item怎么展示用的,首先重写展示视图内的layoutAttributes方法,在此方法中找到attribute对应的item及其属性,和collectionView的偏移量和中心点,进行一系列的计算:

    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
            
            //集合视图的宽高(这里默认宽高相等)
            let itemHeight = self.collectionView?.frame.height ?? 0
            //可是视图内的attributes数组
            let array = super.layoutAttributesForElements(in: rect)
            //item透明度开始变化时的item的中心点x
            let centerX = self.collectionView!.contentOffset.x + itemHeight/2
            print(self.collectionView?.contentOffset.x ?? 0)
            
            for attributes in array! {
                //开始变化时的item的中心点x 与 实际中心点相比较
                let value = attributes.center.x - centerX
                let delta = abs(value)
                //设置缩放比例,此处4*itemHeight可根据缩放效果进行修改
                let scale = 1 - delta/(4*itemHeight)
        
                //设置缩放比例
                attributes.transform = CGAffineTransform.init(scaleX: scale, y: scale)
                //层次关系,设置此属性使item依次上下排列
                attributes.zIndex = Int(1 - abs(delta))
                
                //value<=0表示向左移动,最前面的item停止一段距离
                if value <= 0{
                    //实际中心点与开始变化时的item的中心点小于等于设定的边界值
                    if delta >= 0 && delta <= itemHeight
                    {
                        //item的中心点固定不变
                        attributes.center.x = centerX
                        //根据推进值,改变item的透明度,此处的delta>10是想让item有一个达到目标区域时有一个停顿效果而不是直接进入改变透明度的阶段
                        attributes.alpha = (delta > 10) ? (1 - delta/(itemHeight/4)) : 1
                        //设置缩放比例,停顿阶段不进行缩放
                        attributes.transform = CGAffineTransform.init(scaleX: 1, y: 1)
                    } else {
                        //移动大于边界值,就是从停顿阶段到透明度改变,此处是下一个item上来,当前item透明度变为0
                        attributes.alpha = 0
                    }
                }
            }
            return array
        }

    解决最后一个小问题,拖动iitem开始滚动,滚动结束时让它自动滚动到网格区域,而不是停在当前或许不适当的地方,重写UICollectionViewFlowLayout另一个方法:

    override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint {
            
            let targetRect = CGRect(x: proposedContentOffset.x, y: 0.0, width: self.collectionView!.bounds.size.width, height: self.collectionView!.bounds.size.height)
            
            //目标区域中包含的cell
            let attrArray = super.layoutAttributesForElements(in: targetRect) as! [UICollectionViewLayoutAttributes]
            //collectionView落在屏幕重点的x坐标
            let horizontalCenterX = proposedContentOffset.x + (self.collectionView?.frame.height ?? 0)/2
            var offsetAdjustment = CGFloat(MAXFLOAT)
            for layoutAttributes in attrArray {
                
                let itemHorizontalCenterX = layoutAttributes.center.x
                //找出离中心店最近的
                if (abs(itemHorizontalCenterX-horizontalCenterX) < abs(offsetAdjustment)) {
                    offsetAdjustment = itemHorizontalCenterX - horizontalCenterX
                }
            }
            
            //返回collectionView最终停留的位置
            return CGPoint(x: proposedContentOffset.x + offsetAdjustment, y: proposedContentOffset.y)
            
        }
    //当collectionView的显示范围发生改变的时候,是否重新布局
        override func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool {
            return true
        }

    最后一个方法不写看不到渐变的效果。

    源码地址:点击打开链接

    展开全文
  • 今天做项目过程中,需要切换背景图片,但是由于直接切换十分生硬,因此使用如下动画,可以时图片改变时有渐变的效果。 [objc] view plaincopyprint? "white-space:pre"> CATransition ...

    今天做项目过程中,需要切换背景图片,但是由于直接切换十分生硬,因此使用如下动画,可以时图片改变时有渐变的效果。

    1. <span style="white-space:pre">  </span>    CATransition *transition = [CATransition animation];  
    2.             transition.duration = 0.3;  
    3.             transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];  
    4.             transition.type = kCATransitionFade;  
    5.             [self.backgroundImage.layer addAnimation:transition forKey:@"a"];  
    6.             [self.backgroundImage setImage:self.basicImage];  

    转载:http://blog.csdn.net/ksws0393238aa/article/details/21297823
    展开全文
  • 思路:使用Section来实现,每一组的数据都一样,默认设置N组(正常情况下50-100即可,除非有人很无聊),然后添加定时器,使CollectionView滚动到...https://github.com/shijinliang/KSDemo/tree/CollectionView轮播图

    用CollectionView实现轮播图效果

    思路:使用Section来实现,每一组的数据都一样,默认设置N组(正常情况下50-100即可,除非有人很无聊),然后添加定时器,使CollectionView滚动到相应的地方,手动拖拽是collectionView本身就具备的。

    https://github.com/shijinliang/KSDemo/tree/CollectionView轮播图
    https://github.com/shijinliang/KSDemo里面的 一个分支,之后会合并到主分支,所以clone下来的master上会有一个文件夹“CollectionView轮播图”
    【欢迎star】

    封装方法:

    typedef void(^selectImageBlock)(NSInteger index);
    
    @interface CollectionImageView : UIView
    /**
     *  封装collectionView实现轮播图
     *
     *  @param frame      传入轮播图的frame
     *  @param imageArray 图集数组表示
     *  @param block      点击图片的方法用block公开出去
     *
     *  @return
     */
    - (instancetype)initWithFrame:(CGRect)frame imageArray:(NSArray *)imageArray selectImageBlock:(selectImageBlock) block;
    

    集成“CollectionView封装”文件夹的代码,调用如下代码即可实现效果:

    NSArray *images = @[@"icc1",@"icc2",@"icc3",@"icc4",@"icc5"];
    CollectionImageView *view =
     [[CollectionImageView alloc]initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, 300) 
     imageArray:images 
     selectImageBlock:^(NSInteger index) {
            NSLog(@"点击的是第%d个",index);
        }];
    [self.view addSubview:view];

    小注:关于上面说的设置N组,在定时器状态下,有一个优化,可以使其在计算下一页的时候,先重算位置,无动画滚动到中间的那组。然后再滚动到下一页,这样collectionView只要2组就足够,但是拖拽的时候出问题了,会出现拖拽到屏幕外时可能返回当前页,未移动到目标页面。
    主要因为 NSIndexPath *currentPath = [[self.collectionView indexPathsForVisibleItems] lastObject]; 这部分代码导致,
    [self.collectionView indexPathsForVisibleItems] 此方法返回一个数组,有的时候返回一个NSIndexPath,有的时候返回的是两个,当返回两个的时候,手动拖拽可能会出现:
    我打印的是数组里面NSIndexPath的row,【1,2】 【2,1】,可能会出现这两种结果,所以拖拽的时候没有使用重算位置这个方法。

    哪位童鞋有好的办法欢迎指导

    展开全文
  • 代码地址:l轮播图代码地址 实现功能: 定时切换(3s) 鼠标放上去停止切换 点击左右图片进行图片切换 鼠标放上去显示向左向右按钮,鼠标移下来再次隐藏 点击向左向右按钮进行相应切换 鼠标放到下方的线上,...
  • 微信小程序3D轮播图实现

    万次阅读 2019-09-23 17:58:25
    好久没有写博客了,前段时间换了家公司,做了两个多星期,完成了一款app的开发, 公司没有app的需求了,我们几个移动端Android和IOS都转岗开发微信小程序,由于刚接触小程序不到两周,技术还是基于复制粘贴,h5以前...
  • ViewPagerTransformer实现3d轮播图

    千次阅读 2016-04-19 22:07:10
    概述CoverFlow效果IOS上自带的控件,类似3d轮播图效果。 在Android中也有很多的相关实现,大体都是使用Gallery和Camera来实现的。相关开源库:ImageCoverFlow效果图:但是Gallery已经被标记过时,而且ViewPager更...
  • iOS--轮播视图

    2016-06-04 17:22:24
    原文  ... ... ...平时APP中的广告位或者滚动的新闻图片等用到的就是图片轮播这种效果,实现方式主要有两种,一种是ScrollView+ImageView,另一种则是通过CollectionView,今天总结的
  • iOS 网络资源汇总之动画

    万次阅读 2016-05-13 17:49:28
    Core Animation笔记,基本的使用方法 - Core ...awesome-ios-animation - iOS Animation 主流炫酷动画框架(特效)收集整理 收集整理了下iOS平台下比较主流炫酷的几款动画框架。 侧滑与右滑返回手势 SloppySwiper - iOS
  • iOS App增加启动渐变效果

    千次阅读 2013-01-29 22:21:08
    由于目前苹果没有支持该功能,所以只能自己在App启动后做一个过度效果: [cpp]  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  {  ...
  • iOS开发 - 卡片堆叠效果

    万次阅读 2017-07-20 20:55:32
    ,这就是最终效果。 去年安卓5.0发布的时候,当我看到安卓全新的Material Design设计语言后,真的是喜欢的不得了,这种设计语言不同于偏平式设计以及卡片式设计。简约,自然。直到15年初,偶然看到CM团队已经...
  • (JXBanner 支持多种动画变换, 支持纯代码布局和Xib布局) ...运行条件: iOS(8.0+) 开源框架:github地址   (如果使用有什么问题,可以留言,欢迎一起学习,欢迎star) Installation [安装] 安...
  • #define kDegreesToRadian(x) (M_PI * (x) / 180.0) #define kRadianToDegrees(radian) (radian*180.0)/(M_PI) - (void)viewDidLoad { [superviewDidLoad]; self.title = @"测试动画"; self.view.backgr
  • github优秀开源项目大全-iOS

    万次阅读 2014-11-04 22:09:41
    github优秀开源项目大全-iOS Apr 25th, 2014 前言 本文旨在搜集github上优秀的开源项目 本文搜集的项目都是用于iOS开发 本文会持续更新… 完整客户端 ioctocat github的iOS客户端,目前开源...
  • IOS开源库一览表

    万次阅读 2014-09-25 13:50:33
    应有尽有,包罗万象 ... http://github.ibireme.com/github/list/ios/ GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库
  • 网易新闻iOS版使用的18个开源组件

    千次阅读 2015-05-31 16:10:07
    网易新闻iOS版在开发过程中曾经使用过的第三方开源类库、组件 1、AFNetworking AFNetworking 采用 NSURLConnection + NSOperation, 主要方便与服务端 API 进行数据交换, 操作简单, 功能强大, 现在许多人都用它
  • 下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件。SVPullToRefresh - 下拉刷新控件。MJRefresh - ... 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能。...
  • Bison的技术博客目录

    千次阅读 2016-08-12 21:50:07
    持续更新中。。。 ...iOS开发如何实现长微博的功能 ...iOS使用Google地图Api创建的地图显示标注及轨迹回放 ...iOS开发获取通讯录并发短信给联系人 ...iOS开发类似折800功能中的一个小Demo ...iOS开发打包静态库
  • UI 下拉刷新 EGOTableViewPullRefresh- 最早的下拉刷新控件。 SVPullToRefresh- 下拉刷新...MJRefresh- 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能。...XHRefreshContr
1 2 3 4 5 ... 20
收藏数 6,935
精华内容 2,774
关键字:

3d效果轮播图 ios