[转载]iCarousel

来源:互联网 发布:mac免费版办公软件下载 编辑:程序博客网 时间:2024/05/19 12:16
原文地址:iCarousel作者:静若寒暄
文档
支持的操作系统和SDK版本
支持构建目标 - 的iOS 5.1 / MAC OS 10.7(苹果的Xcode 4.3.3 LLVM编译器3.1 )
最早支持的部署目标 - 的iOS 4.3 / Mac OS 10.7中
最早兼容的部署目标 - 3.2的iOS / Mac OS 10.6的
注: '支持'意味着这个版本已经过测试,该库。 '兼容'的意思,图书馆应在此版本的操作系统(即它不依赖于任何不可用的SDK功能) ,但不再进行兼容性测试,并且可能需要调整或错误修复,正常运行。
ARC兼容
至于1.6.1版本, iCarousel的自动ARC和非ARC项目通过条件编译。有没有必要排除iCarousel的的文件从ARC验证过程中,或使用ARC转换工具转换iCarousel 。
线程安全
iCarousel来自UIView和 - 与所有的UIKit组件 - 它应该只从主线程访问。您可能希望使用线程加载或更新的传送带内容或项目,但始终确保已加载,一旦你的内容,你切换回主线程之前更新传送带。
安装
在应用程序要使用iCarousel类,只需拖动iCarousel的类文件(演示文件和不需要的资产) ,并添加到您的项目的QuartzCore框架。
变色龙支持
现在是兼容iCarousel与变色龙的iOS的Mac转换库( https://github.com/BigZaphod/Chameleon )的。要使用iCarousel变色龙,添加USING_CHAMELEON的“你的项目的预处理宏。退房的变色龙演示示例项目您的iOS iCarousel的应用程序如何移植到Mac OS使用变色龙 - 示例演示如何运行无笔尖的iPhone在Mac OS中使用的例子变色龙。需要注意的是自来水,中心目前没有工作,必须使用两指滚动手势滚动,点击和拖动(这些都是由于的UIGestureRecognizer变色龙实现的功能/限制) 。
旋转木马类型
iCarousel支持以下内置显示类型:
iCarouselTypeLinear
iCarouselTypeRotary
iCarouselTypeInvertedRotary
iCarouselTypeCylinder
iCarouselTypeInvertedCylinder
iCarouselTypeWheel
iCarouselTypeInvertedWheel
iCarouselTypeCoverFlow
iCarouselTypeCoverflow2
iCarouselTypeTimeMachine
iCarouselTypeInvertedTimeMachine
您也可以实现自己的定制的旋转木马风格使用iCarouselTypeCustom和传送带: itemTransformForOffset : baseTransform :委托方法。
注:在iCarouselTypeCoverFlow和iCarouselTypeCoverFlow2类型之间的区别是非常微妙的,但是基本上是更复杂的逻辑iCarouselTypeCoverFlow2 。如果你轻拨转盘,他们基本上是相同的,但如果你慢慢用手指拖动传送带的区别应该是显而易见的。 iCarouselTypeCoverFlow2设计尽可能地模拟标准苹果的CoverFlow效果,并巧妙地在未来可能会改变这一目标的利益。
属性
该iCarousel具有以下属性(注:对于Mac OS,替代的NSView UIView的使用性质时) :
@属性(非原子,弱) IBOutlet ID数据源;
的对象,支持iCarouselDataSource的协议,可以提供意见,填充传送带。
@属性(非原子,弱) IBOutlet ID委托;
支持的iCarouselDelegate协议的对象可以响应传送带事件和布局要求。
@属性(非原子,分配) 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 ;
@属性(非原子,分配,吸气剂= isScrollEnabled的) BOOL scrollEnabled的;
启用和禁用用户滚动的传送带。旋转木马编程仍然可以滚动,如果这个属性被设置为NO 。
@属性(非原子,只读,吸气剂= isWrapEnabled ) 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 。
@属性(非原子,分配,吸气剂= isVertical ) BOOL垂直;
此属性切换转盘是否水平或垂直显示在屏幕上。内置的传送带类型在这两个方向的工作。切换到垂直改变的布局的传送带,以及在屏幕上的滑动检测方向。但是需要注意的是自定义转盘变换不会受到此属性,轻扫手势方向仍然会受到影响。
@属性(非原子,分配) BOOL ignorePerpendicularSwipes的;
如果为“是” ,将忽略传送带的传送带的方向垂直于滑动手势。所以一个水平旋转木马,垂直挥笔将不会被拦截。这意味着你可以有一个垂直滚动的传送带项目视图的滚动视图里面,它仍然会正常。默认设置为YES。
@属性(非原子,分配) BOOL clipsToBounds的;
其实,这是不是一个财产的iCarousel ,但继承自UIView的。它包括在这里,因为它是一个频频失手的功能。设置为YES溢出自己的边界,以防止传送带项目的意见。您可以设置此属性在Interface Builder滴答夹子视图“选项。默认为NO 。
方法
iCarousel类有以下几种方法(注:适用于Mac OS UIView的方法参数,替代的NSView ) :
- (无效) scrollToItemAtIndex的: ( NSInteger的)指数动画: ( BOOL )动画;
这将中心的传送带上的指定的产品,立即或具有平滑的动画。对于包裹的传送带,传送带会自动判断最短距离(直接或环绕)滚动。如果你需要控制滚动的方向,或要超过一周滚动,使用scrollByNumberOfItems方法代替。
- scrollToItemAtIndex (无效) : ( NSInteger的)指数的期限: ( NSTimeInterval ) scrollDuration ;
此方法允许您控制多久转盘滚动到指定的索引。
- (无效) scrollByNumberOfItems的: ( NSInteger的) itemCount属性持续时间: ( NSTimeInterval )持续时间;
此方法允许您滚动传送带由一个固定的距离,传送带项目宽度测量。 itemCount属性可以指定正值或负值,这取决于你希望的方向滚动。摆好iCarousel处理边界问题,所以,如果你指定的距离大于转盘中的项目数量,滚动将被钳位在到达终点的旋转木马(如果包装被禁用)或环绕无缝。
- (无效) scrollToOffset : ( CGFloat )偏移的期限: ( NSTimeInterval )持续时间;
这样的工作方式相同为scrollToItemAtIndex : ,但允许你滚动到一个小数偏移。这可能是有用的,如果你想实现一个非常精确的动画效果。请注意如果将scrollToItemBoundary属性设置为YES ,传送带会自动滚动到最近的项目指标后调用此方法。无论如何。
- (无效) scrollByOffset : ( CGFloat )偏移的期限: ( NSTimeInterval )持续时间;
这样的工作方式相同作为scrollByNumberOfItems : ,但允许您滚动项目的小数。这可能是有用的,如果你想实现一个非常精确的动画效果。请注意,如果将scrollToItemBoundary属性设置为YES ,转盘会自动滚动到最近的项目指标后,调用此方法,反正。
- (无效) reloadData ;
这将重新载入所有传送带的意见DataSource和刷新转盘显示。
- ( UIView的* ) itemViewAtIndex :指数( NSInteger的) ;
返回可见项目指定索引视图。请注意该指数与转盘中的位置,不是visibleItemViews阵列中的位置,这可能是不同的。通过负的索引或一个大于或等于numberOfItems的检索占位符意见的。该方法只适用于可见项目的意见和尚未加载,如果在指定的索引视图将返回nil ,如果该索引是出界。
- ( NSInteger的) indexOfItemView : ( UIView的*)查看;
该指数在传送带对于一个给定的项目视图。工程项目的意见和占位符的意见,但是占位符视图索引不匹配使用的数据源,并可能为负(见的indexesForVisibleItems上盖物业的更多细节) 。这种方法只适用于可见的项目意见和,将返回NSNotFound的意见,目前没有载入。对于所有当前加载的意见列表中,使用visibleItemViews属性。
- ( NSInteger的) indexOfItemViewOrSubview : ( UIView的* )视图
这种方法可以让你通过视图或视图包含视图作为参数传递的项目指标。它的工作原理走了视图层次结构与传递的观点出发,直到它找到一个项目视图,并返回其索引内的旋转木马。当前加载的项目视图如果没有被发现,它返回NSNotFound的。这种方法是非常有用的控制内嵌入一个项目视图处理事件。这可以让你所有你的项目控制绑定到一个单一的视图控制器的操作方法,然后制定出项目的控制触发该操作有关。你可以看到一个例子,这种技术在控制演示示例项目。
- ( CGFloat ) offsetForItemAtIndex的: ( NSInteger的)指数;
返回偏移指定项目索引在中心位置itemWidth倍数。这是相同的值用于,计算视图​​变换和α ,可用于定制产品的基础上它们的位置在旋转木马的意见。这个值可以被改变为每个视图,每当carouselDidScroll :委托方法被称为。
- (无效) removeItemAtIndex的: ( NSInteger的)指数动画: ( BOOL )动画;
从传送带上删除的项目。其余项目将滑过,填补了国内空白。注意,不会自动更新数据源当这个方法被调用,所以后续调用reloadData将恢复已删除项目。
- (无效) insertItemAtIndex的: ( NSInteger的)指数动画: ( BOOL )动画;
这是插入到转盘中的一个项目。新的项目将被要求从数据源,所以确保新项目已被添加到数据源的数据调用此方法之前,你会得到重复的项目旋转木马,或其他古怪。
- (无效) reloadItemAtIndex的: ( NSInteger的)指数动画: ( BOOL )动画;
此方法将重新加载指定的项目视图。新的项目将被要求从数据源。如果动画的说法是肯定的,它会跨越从旧到新的项目视图淡出,否则会即时交换。
协议
的iCarousel遵循苹果的惯例,为数据驱动的意见提供两个协议接口, iCarouselDataSource iCarouselDelegate 。 iCarouselDataSource协议有以下所需的方法(注:对于Mac OS,替代的NSView UIView的方法参数) :
- ( NSUInteger ), numberOfItemsInCarousel : ( iCarousel *)旋转木马;
返回转盘中的项数(次数) 。
- ( UIView的*)旋转木马: ( iCarousel * )转盘viewForItemAtIndex的: ( NSUInteger ) reusingView指数:( UIView的*)查看;
要显示指定索引处的转盘中返回一个视图。 reusingView参数像的UIPickerView ,先前已显示在传送带的意见传递回被回收的方法。如果这种说法是不为零,则可以设置它的属性,并返回它而不是创建一个新的视图实例,这将略微提高性能。 UITableView的不同,有没有reuseIdentifier区分不同的旋转视图类型,所以如果你的旋转木马包含多个不同视图类型,那么你应该只是忽略此参数并返回一个新的观点方法被称为每次。您应该确保每次旋转木马: viewForItemAtIndex : reusingView :方法被调用时,它要么返回reusingView或一个全新的视图实例,而不是维护自己的游泳池,可回收的意见,返回的多个副本相同的看法,不同的旋转木马项目索引可能会导致显示问题的传送带。
iCarouselDataSource协议有以下可选方法:
- ( NSUInteger ), numberOfPlaceholdersInCarousel : ( iCarousel *)旋转木马;
返回转盘中显示的占位符意见。占位符意见拟用于传送带中的项目当数太少,填补了传送带宽度,和你想显示的东西在空的空间。他们移动的传送带和行为就像任何其他的旋转木马项目,但他们不计朝numberOfItems的值,不能设置为当前选择的项目。占位符是隐藏包裹时被启用。占位符显示任一侧上的圆盘传送带项目。对于n占位符的意见,会出现第n / 2项项目视图左侧和后面的n / 2会出现在右边。你可以有一个奇数的占位符,在这种情况下,传送带将是不对称的。
- ( UIView的*)旋转木马: ( iCarousel * )转盘placeholderViewAtIndex的: ( NSUInteger ) reusingView指数:( UIView的*)查看;
返回一个视图,显示为占位视图的。作品以同样的方式为旋转木马: viewForItemAtIndex : reusingView : 。在一个单独的存储池用于定期转盘reusingViews占位符reusingViews ,所以它不是一个问题,如果您的的占位符意见不同的项目视图。
的iCarouselDelegate协议有以下可选方法:
- (无效) carouselWillBeginScrollingAnimation : ( iCarousel *)旋转木马;
这种方法被称为,每当传送带将开始滚动动画。这可以被触发后,用户编程或自动完成滚动旋转木马,旋转盘重新赞同。
- (无效) carouselDidEndScrollingAnimation : ( iCarousel *)旋转木马;
这种方法被称为传送带结束时动画滚动。
- (无效) carouselDidScroll : ( iCarousel *)旋转木马;
这种方法被称为每当转盘滚动。这就是所谓的无论是否传送带滚动编程方式或通过用户交互。
- (无效) carouselCurrentItemIndexDidChange : ( iCarousel *)旋转木马;
这种方法被称为每当转盘滚动远远不够的currentItemIndex属性改变。这就是所谓的无论产品索引是否被更新编程方式或通过用户交互。
- (无效) carouselWillBeginDragging的: ( iCarousel *)旋转木马;
这种方法被称为当用户开始拖动旋转木马。它不会触发,如果用户点击/点击转盘,如果转盘滚动编程。
- (无效) carouselDidEndDragging :( iCarousel * )传送带willDecelerate : ( BOOL )减速;
这种方法被称为当用户停止拖动旋转木马。的willDecelerate参数指示是否转盘行驶速度不够快,它需要减速,停止前(即不一定是它会停在当前索引),或者如果它在哪里,它会停止。请注意,即使willDecelerate为“否” ,转盘仍将自动滚动,直到它恰在当前索引对齐。如果你需要知道什么时候已经完全停止转动,使用carouselDidEndScrollingAnimation的委托方法。
- (无效) carouselWillBeginDecelerating的: ( iCarousel * )旋转木马;
这种方法被称为转盘时开始减速。它通常会被称为后立即carouselDidEndDragging : :方法, willDecelerate ,假设是willDecelerate 。
- (无效) carouselDidEndDecelerating的: ( iCarousel * )旋转木马;
这种方法被称为当传送带完成减速,你可以假设,在这一点上currentItemIndex最终停止值。不像以前的版本中,传送带将完全停止在大多数情况下,在最后的索引位置。唯一的例外是对非包裹传送带与启用,如果最终停止位置超出年底传送带,转盘就会自动滚动,直到它完全吻合年底指数反弹。为了向后的兼容性,转盘将随时拨打scrollToItemAtIndex :动画完成后减速。如果您需要知道某些已经完全停止转动转盘时,使用carouselDidEndScrollingAnimation的委托方法。
- ( CGFloat ), carouselItemWidth : ( iCarousel *)旋转木马;
返回转盘中每个项目的宽度 - 即每个项目视图的间距。如果该方法不落实,默认第一项视图所返回的​​传送带的宽度: viewForItemAtIndex : reusingView :数据源方法。此方法应该只用于作物或垫项目的意见,如果返回的意见,从旋转木马: viewForItemAtIndex : reusingView :不正确(例如,如果意见不同的大小,或包含阴影或影响他们在他们的背景图像外发光大小) - 如果你只是想要避开的意见有点那么最好而不是使用的iCarouselOptionSpacing值。
- ( CATransform3D )旋转木马:( iCarousel * )传送带itemTransformForOffset : ( CGFloat )偏移baseTransform : ( CATransform3D )变换;
这种方法可以用来提供每个转盘视图自定义转换。偏移的说法是认为从传送带的中间距离。当前为中心的产品图将有0.0的偏移量,右边的一个有1.0的偏移值,一个向左的偏移值-1.0 ,等等。要实现的线性旋转木马风格,因此你会简单地乘以偏移值由项目宽度和使用它作为转换的x值。此方法仅称为,若转盘类型iCarouselTypeCustom的。
- ( CGFloat ),旋转木马: ( iCarousel * )转盘valueForOption的: ( iCarouselOption )选项withDefault的: ( CGFloat ),的值;
这个方法是用来自主标准传送带类型的参数。通过实施这种方法,你可以调整的选项,如在一个圆形转盘显示的项目数,或倾斜量在CoverFlow的传送带,传送带以及是否应该换,如果它的两端应该淡出等对于任何选项,你是不是有兴趣调整,只是返回默认值。下面列出的这些选项的含义下iCarouselOption值。先进的检查选项演示使用这种方法的例子。
- (无效)旋转木马: ( iCarousel * )转盘didSelectItemAtIndex的: ( NSInteger的)指数;
此方法将触发,如果用户点击任何传送带项目视图(不包括占位符的意见) ,其中包括当前选择的视图。如果用户点击当前选择的视图(即认为uicontrol的一个子类)内的控制,这种方法不会触发。
- ( BOOL )旋转木马: ( iCarousel * )转盘shouldSelectItemAtIndex的: ( NSInteger的)指数;
此方法将触发,如果用户点击任何传送带项目视图(不包括占位符的意见) ,其中包括当前选择的视图。方法的目的是给你的机会,忽略了一个水龙头在传送带上。如果返回YES的方法,或者没有实现它,水龙头将被正常处理和转盘: didSelectItemAtIndex的:方法会被调用。如果返回NO ,传送带将忽略水龙头,它会继续传播视图层次。这是一个很好的方式,以防止用于处理由另一个视图点击事件的旋转木马拦截。
iCarouselOption值
这些都是可修改的选项标准传送带。检查“选项”演示的效果,这些参数的一个例子。
iCarouselOptionWrap
一个布尔值,表示转盘是否应该换时,滚动到年底。返回YES ,如果你想传送带环绕当它到达终点,和NO ,如果你想让它停止。一般来说,圆形转盘类型默认情况下,线性不会将包裹。不要担心,返回类型是浮点值 - 0.0以外的值将被视为是。
iCarouselOptionShowBackfaces
对于某些传送带类型,例如iCarouselTypeCylinder ,后侧的某些视图中可以看到(现在iCarouselTypeInvertedCylinder缺省情况下,隐藏背面) 。如果你想隐藏落后的意见,你可以返回NO此选项。要覆盖默认为iCarouselTypeInvertedCylinder回脸隐藏,你可以返回YES 。此选项也可能是有用的自旋转盘变换导致要显示的视图的背面。
iCarouselOptionOffsetMultiplier
使用当用户用他们的手指拖动旋转木马的偏移乘数。它不会影响纲领性滚动的或减速速度。默认值为1.0最传送带类型,但默认2.0的CoverFlow风格的旋转木马,以弥补自己的物品的事实,更密集,所以必须进一步拖累移动相同的距离。
iCarouselOptionVisibleItems
这是项目的意见(包括占位符) ,这应该是一次转盘中可见的最大数量。将显示当前选定的项目指数两侧的意见,这个数字的一半。外,将不会被加载次数,直到它们被滚动到视图。这允许传送带包含一个非常大的性能无不利影响的项目数。 iCarousel基于在传送带上的类型,选择一个合适的默认值,但是你不妨使用此属性来覆盖该值(例如,如果你已经实现了自定义转盘型) 。
iCarouselOptionCount
扶轮缸和轮毂变换中要显示的项数。通常这是自动计算传送带中的项目视图的大小和数量的基础上,但如果你想更精确的控制转盘的外观,则可以覆盖此。这个属性是用来计算转盘半径,因此,另一种选择是直接操纵的半径。
iCarouselOptionArc
电弧扶轮缸和轮毂变换(弧度) 。通常默认为2 * M_PI (一个完整的圆),但你可以指定一个较小的值,因此,例如M_PI值将创建一个半圈或缸。这个属性是用来计算转盘半径和角度步骤,因此,另一种选择是直接操作这些值。
iCarouselOptionRadius
扶轮缸和车轮的半径变换在像素/分。这通常是计算,以便可视项的数量正好装入指定的电弧。您可以处理这个值,以增加或减少产品的间距(与圆的半径) 。
iCarouselOptionAngle
扶轮缸和轮转换中的每个项目之间的角度步(弧度) 。操纵该值不改变的半径将导致的传送带的端部处的间隙或导致资料重叠。
iCarouselOptionTilt
适用于在的CoverFlow , CoverFlow2和时间机器传送带类型的非中心项目倾斜。这个值应该是在0.0到1.0的范围内。
iCarouselOptionSpacing
项目视图之间的间距。这个值乘以项目宽度(或高度,如果传送带是垂直的) ,每个项目之间的总空间,所以1.0的值(默认值)是指之间没有空格的意见(除非该意见已经包括填充,他们在许多的例子项目) 。
iCarouselOptionFadeMin
iCarouselOptionFadeMax
iCarouselOptionFadeRange
这三个选项控制淡出旋转木马项目的意见的基础上,他们从目前中心项目抵消。 FadeMin是最低的负偏移的项目视图可以达到才开始褪色。 FadeMax是最大正抵消视图可以达到前开始褪色。 FadeRange的产品之间可以移动的点,在它开始褪色,变得完全不可见的点,在它的距离。
水龙头检测项目视图
有两种基本的方法检测水龙头意见iCarousel iOS上。第一种方法是简单地使用转盘: didSelectItemAtIndex :委托方法,激发每一个项目时被窃听。如果你只在水龙头上目前中心的项目感兴趣,你可以比较currentItemIndex的财产免受这种方法的指标参数。
另外,如果你想要多一点的控制,你可以提供一个的UIButton的或者uicontrol的项目视图和处理自己的触摸交互。如何做到这一点的一个例子看到按钮演示示例项目(不工作在Mac OS上,见下文)。
您还可以嵌套此时控件在您的项目的意见,并会收到这些触及预期(见控制演示示例项目为例) 。
如果你想检测其他类型的互动,比如点击,双水龙头或长按,最简单的方法是UIGestureRecognizer附上您的项目视图或子视图,然后将它传递给传送带。
注意任何项目来看,除了当前选择的水龙头和手势会被忽略,除非你设置属性为NO centerItemWhenSelected 。
在Mac OS中,有没有简单的方法来控制嵌入目前iCarousel项目视图内。你不能仅仅提供一个NSButton在你的项目视图或,因为变换应用于该项目的意见意味着,命中检测工作不正常。我调查可能的解决方案(如果你知道一个好的办法解决这个问题,请取得联系,或叉在github上的项目) 。
示例项目
iCarousel包括许多范例项目,以帮助您开始。这里是为每个电梯和简要说明:
基本的iOS例
这是一个很简单的例子演示了如何设置了传送带与iCarouselCoverflow2类型,适用于iOS 。
iOS的演示
这是一个比较复杂的iOS演示程序,展示了所有不同类型的旋转木马和附加功能,如动态插入/缺失项目。
Mac的演示
这是Mac OS移植iOS的演示示例,复制相同的功能。
按钮演示
这个例子演示如何使用UIButtons , iOS上为您的项目的看法,正确处理事件。
控制演示
这个例子演示了如何在您的项目在iOS意见巢控制和正确处理的事件,以及如何从nib文件加载复杂项目的意见,而不是他们在代码​​生成。
多转盘
这个例子演示了如何使用多个转盘在一个单一的视图控制器。
没有笔尖演示的
此示例演示如何设立iCarousel的笔尖文件,而无需使用iOS上。
故事板演示
这个例子演示了如何设置iCarousel使用故事板在iOS 5及以上。
偏移演示
这个例子演示了如何使用的contentOffset和viewpointOffset物业,他们的影响。
选项​​演示
这个例子演示了如何自定义外观的每一个旋转木马型使用iCarouselOption API 。
动态视图思考
这个例子演示了如何使用ReflectionView类( https://github.com/nicklockwood/ReflectionView )来动态地生成您的项目视图的反射。这是适用于包含子视图或控制项的意见。项意见,只是图像,这是更好地使用动态图像效果的例子所示的方法。
动态图像效果
这个例子演示了如何使用FXImageView类( https://github.com/nicklockwood/FXImageView )来动态地生成您的传送带图像的反射和阴影。
动态下载
这个例子演示了如何使用AsyncImageView级( https://github.com/nicklockwood/AsyncImageView )动态下载远程图片,并显示它们在传送带不阻塞主线程或性能产生负面影响。
下载和影响
这个例子演示了如何使用FXImageView级( https://github.com/nicklockwood/FXImageView )下载图像的飞行和应用反射和实时下拉阴影。
常问问题
问:我升级到新版本的iCarousel ,它打破了我的项目,我怎么得到旧的回来吗?
答:每个被标记为以前版本的iCarousel github上单独下载 - 看看“标签”选项卡。

问:我可以使用iCarousel没有nib文件?
答:是的,检查出*没有笔尖演示*如何设置无笔尖iCarousel

问:我可以使用一个Storyboard iCarousel ?
答:是的,这是相当多的一样用笔尖文件。 *故事情节演示*看它是如何做的。

问:我如何防止iCarousel的项目意见溢出自己的边界呢?
A.设置` clipsToBounds `属性设置为YES您的iCarousel视图。您可以设置此属性在Interface Builder滴答夹子视图“选项。

问:我越来越怪异问题的意见在转盘中的错误之分。这是怎么回事呢?
答:你可能在你的“旋转木马: viewForItemAtIndex : reusingView回收意见:`使用` reusingView参数没有设置视图的内容每次。研究演示程序更加紧密,并确保你没有做你所有的项目视图设置在错误的地方。

问:我在我的旋转木马加载50张,我一直在运行内存。我怎样才能解决这个问题?
答:诀窍是在后台线程上转盘的滚动,而不是其全部加载预先加载的意见。 *动态下载*如何做到这一点使用AsyncImageView库的例子。例如使用远程图像的URL ,但确切的同样的方法将很好的工作在你的应用程序的本地托管的图像 - 只需创建本地文件的URL ,使用`[ NSURL fileUrlWithPath的:... ]` 。

问:我可以使用多个转盘在同一视图控制器?
答:是的,检查出*多个旋转木马*如何做到这一点的例子。

问:我无法弄清楚如何使用iCarousel在我的项目中,有一个简单的例子吗?
答:是的,检查出*基本的IOS示例*一个光秃秃的骨头实施项目。如果你还不清楚是怎么回事,请阅读有关如何UITableView的作品,一旦你明白了, iCarousel会更有意义。

问:在旋转盘iCarouselTypeCylinder ,后侧的产品的观点是可见的。我怎么能隐藏这些意见吗?
答:您可以返回NO作为的` iCarouselOptionShowBackfaces `选项的值,或设置` view.layer.doubleSided的`属性对您的产品视图`无`隐藏他们时,他们正面临着倒退。

问:什么是的` reusingView `财产在`转盘: viewForItemAtIndex : reusingView : `数据源的方法?
0 0
原创粉丝点击