iCarousel类-分页滚动视图应用

来源:互联网 发布:matlab编程入门教程 编辑:程序博客网 时间:2024/06/11 00:21

iCarousel是一个类,它继承于UIView。
开源地址 https://github.com/nicklockwood/iCarousel

先看下实际效果 两种类型 可滑动
demo:https://github.com/linjiu/iCarouselDemo
其中热映电影部分用到此类

1

6

iCarousel类的实现方式,先通过( iCarouselDataSource)协议方法确定需要显示视图的个数,和创建需要显示的视图。
iCarousel内先创建一个可变字典,用于存储需要显示的单元格视图。创建一个父视图用于显示单元格视图,从字典中取出需要显示的单元格视图添加到创建父视图上,用于显示需要创建的单元格视图,在iCarousel类的内部对这些需要显示的单元格视图进行布局。

重要的基本属性:
iCarouselType; //视图的显示类型
pagingEnabled BOOL 是否可整页滑动
scrollOffset = 0 初始设置偏移量为0
需要设delegate及dataSource

代理方法

//设置显示在iCarousel上的元素的个数- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel//设置在iCarousel上显示的内容- (UIView *)carousel:(iCarousel * __nonnull)carousel viewForItemAtIndex:(NSInteger)index reusingView:(nullable UIView *)view//转动触发方法- (void)carouselDidEndScrollingAnimation:(iCarousel *)carousel- //可以设置iCarousel的一些属性,比如说可以设置可滑动显示的内容可以循环显示,还可以设置每个元素的高度,每次显示多少个元素等等。- (CGFloat)carousel:(iCarousel *)carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value

详细属性:

iCarouselType//用于切换转盘显示类型CGFloat角度//用来调整的角度透视效果的3D旋转木马的各种意见。应该是一个负值,小于0和大于-0.01 。超出此范围的值会产生非常奇怪的结果。默认值为-1/500 , -0.005 ;CGSize contentOffset//这个属性是用来调整偏移转盘项目的意见相对传送带的中心。它的默认CGSizeZero ,也就是说传送带项目集中。改变这个值移动转盘的项目,而不改变他们的观点,即消失点的移动与旋转木马项目,所以,如果你移动传送带项目下来,它不会出现,如果你正在寻找在传送带上。CGSize viewpointOffset//此属性用于调整用户的观点出发,相对于传送带的项目。它具有相反的效果调整contentOffset的,即如果移动视点然后旋转木马出现向下移动。不像contentOffset ,移动的观点,也改变的角度消失点相对到传送带项,因此当您移动的角度来看,它会出现,如果你正在寻找在传送带上。CGFloat decelerationRate//传送带的速率减速时挥动。值越高意味着减速放缓。默认值是0.95 。值范围在0.0 (传送带时立即停止发布)到1.0 (传送带继续下去,而不会减慢,除非到达终点)。BOOL反弹//集传送带是否反弹结束过去和返回,或停止死。请注意,这有没有影响传送带设计包装类型,或委托方法返回carouselShouldWrap YES 。CGFloat bounceDistance//非包裹传送带冲出结束时,它会反弹的最大距离。这是衡量的倍数itemWidth ,所以值1.0表示一个整体的产品宽度传送带将反弹,将价值0.5项目的宽度的一半,依此类推。默认值是1.0 ;BOOL scrollEnabled//启用和禁用用户滚动的传送带。旋转木马编程仍然可以滚动,如果这个属性被设置为NO 。BOOL wrapEnabled的//返回YES ,如果启用了换行“和”否“ ,如果它不是。此属性是只读的。如果你想覆盖默认值,落实转盘: valueForOption : withDefault :委托方法和返回一个值iCarouselOptionWrap 。NSInteger的numberOfItems//转盘中的项目数(只读)。numberOfItemsInCarousel //数据源的方法。请注意,并不是所有这些项目的意见将被加载或在给定的时间点,可见 - 旋转木马加载项意见,因为它的滚动需求。NSInteger  numberOfPlaceholders//转盘中显示的占位符意见数(只读) numberOfPlaceholdersInCarousel//数据源的方法。NSInteger numberOfVisibleItems //旋转木马项目的意见的最大数量,同时显示在屏幕上(只读) 。此属性是非常重要的性能优化,并自动计算在传送带上的类型和视图框架。如果你想覆盖默认值,落实转盘: valueForOption : withDefault :委托方法和返回一个值iCarouselOptionVisibleItems 。NSArray * indexesForVisibleItems//目前一个数组,包含所有项目的索引视图旋转木马,加载和可见包括占位符意见。该数组包含的NSNumber对象的整数值相匹配的索引的意见。产品视图的索引从零开始,并匹配的索引传递给数据源加载视图的, ,但是任何可见的占位符视图的索引将是负的(小于零) ,或者大于或等于numberOfItems的。在这个数组索引占位符的意见不等同于占位符使用的数据源视图索引。NSArray * visibleItemViews//目前,所有项目的数组视图显示在转盘(只读) 。这包括任何可见的占位符意见。索引这个数组中的意见不相符的项目指标,但这些观点的顺序相匹配的visibleItemIndexes阵列属性的顺序,也就是说,你可以得到项目索引检索相当于对象从这个数组中的一个给定的视图visibleItemIndexes阵列(或可以只使用indexOfItemView的方法,这是非常容易) 。UIView的内容//鉴于包含转盘项意见。您可以添加子视图,这个视图,如果你想穿插旋转木马项目。如果你想要一个视图出现在前面或后面所有的旋转木马项目,你应该直接把它添加到视图本身iCarousel代替。需要注意的是为了里面的内容的意见是受频繁和无证的变化,而​​应用程序正在运行。任何意见添加到内容应该有自己userInteractionEnabled的属性设置为NO ,以防止冲突与iCarousel的触摸事件处理。CGFloat scrollOffset //这是当前的滚动偏移量的旋转木马的itemWidth的倍数。此值时,舍入到最接近的整数,是的值currentItemIndex 。您可以使用此值,其他位置的屏幕元素,而旋转木马是运动。该值也可以设置,如果你想滚动的传送带特定偏移编程。这可能是有用的,如果你想禁用内置的手势处理,并提供自己的实现。CGFloat offsetMultiplier //这是使用时,用户用他们的手指拖动旋转木马的偏移乘数。它不会影响纲领性滚动的或减速速度。默认值为1.0最传送带类型,但默认2.0的CoverFlow风格的旋转木马,以弥补自己的物品的事实,更密集,所以必须进一步拖累移动相同的距离。您不能直接设置此属性,但你可以覆盖默认值通过实施carouselOffsetMultiplier :委托方法。NSInteger的currentItemIndex//当前为中心的产品在传送带的索引。设置这个属性是相当于调用scrollToItemAtIndex :动画:动画参数设置为NO 。UIView * currentItemView //目前中心的项目视图中的旋转木马。这种观点的匹配指数currentItemIndex 。CGFloat itemWidth //在旋转木马项目的显示宽度(只读) 。这是自动从通过使用转盘转盘:第一种观点viewForItemAtIndex : reusingView :数据源的方法。您也可以覆盖这个值使用carouselItemWidth :委托方法,这将改变传送带项目分配的空间(但不会调整大小或缩放该项目的意见) 。BOOL centerItemWhenSelected//当设置为YES ,攻丝其他比匹配currentItemIndex一个转盘中的任何项目将导致它的中心顺利动画。攻当前选定的项目不会有任何影响。默认设置为YES。CGFloat scrollSpeed ​​;//这是滚动速度倍数时,用户用他们的手指的旋转木马笔触。默认值为1.0 。CGFloat切换//此属性的的旋转木马iCarouselTypeCoverFlow2变换用于。暴露,让你可以实现自己的变种的CoverFlow2风格使用转盘: itemTransformForOffset : baseTransform :委托方法。BOOL stopAtItemBoundary//默认情况下,转盘将在一个确切的项目边界来休息时,它挥动。如果将此属性设置为NO,它会自然停止,然后 - 如果scrollToItemBoundary的设置为YES - 向前或向后滚动到最近的边界。BOOL scrollToItemBoundary//传送带停止移动时,默认情况下,它会自动滚动到最近的项目边界。如果将此属性设置为NO,传送带将不会滚动停止后会停留的地方是,即使它不完全一致对当前指数。唯一的例外是,如果包装被禁止,反弹设置为YES,那么无论此设置,转盘将自动滚动到第一个或最后一个项目指标,如果它超出传送带年底来休息。BOOL useDisplayLink//默认情况下,在iOS iCarousel的,而不是使用CADisplayLink的NSTimer动画。在Mac OS中,的CVDisplayLink API来代替。这提供了更好的同步与屏幕刷新,但偶尔可以防止正常工作时,旋转木马是结合其他意见或动画的动画。如果您发现传送带被拖入后,并没有继续移动,尝试将此属性设置为NO 。BOOL垂直//此属性切换转盘是否水平或垂直显示在屏幕上。内置的传送带类型在这两个方向的工作。切换到垂直改变的布局的传送带,以及在屏幕上的滑动检测方向。但是需要注意的是自定义转盘变换不会受到此属性,轻扫手势方向仍然会受到影响。BOOL ignorePerpendicularSwipes//如果为“是” ,将忽略传送带的传送带的方向垂直于滑动手势。所以一个水平旋转木马,垂直挥笔将不会被拦截。这意味着你可以有一个垂直滚动的传送带项目视图的滚动视图里面,它仍然会正常。默认设置为YES。BOOL clipsToBounds//其实,这是不是一个财产的iCarousel ,但继承自UIView的。它包括在这里,因为它是一个频频失手的功能。设置为YES溢出自己的边界,以防止传送带项目的意见。您可以设置此属性在Interface Builder滴答夹子视图“选项。默认为NO 。
0 1