iCarousel 1.8.3版本簡(jiǎn)介

原文鏈接:https://github.com/nicklockwood/iCarousel/blob/master/README.md#rotary

簡(jiǎn)介

iCarousel是一個(gè)類,旨在簡(jiǎn)化在iPhone,iPad和Mac OS上各種類型的輪播(頁(yè)面,滾動(dòng)視圖)的實(shí)現(xiàn)。 iCarousel實(shí)現(xiàn)了許多常見(jiàn)的效果,例如圓柱形,扁平和“ CoverFlow”風(fēng)格的旋轉(zhuǎn)木馬,并提供了掛鉤來(lái)實(shí)現(xiàn)您自己的定制效果。 與許多其他“ CoverFlow”庫(kù)不同,iCarousel可以使用任何類型的視圖,而不僅僅是圖像,因此它是在應(yīng)用程序中以流暢而令人印象深刻的方式呈現(xiàn)分頁(yè)數(shù)據(jù)的理想選擇。 它還使通過(guò)最少的代碼更改在不同的輪播效果之間切換變得非常容易。

支持 OS 和 SDK 版本

  • Supported build target - iOS 10.0 / Mac OS 10.12 (Xcode 8.0, Apple LLVM compiler 8.0)
  • Earliest supported deployment target - iOS 5.0 / Mac OS 10.7
  • Earliest compatible deployment target - iOS 4.3 / Mac OS 10.6

    注:“Supported”表示該庫(kù)已經(jīng)使用此版本進(jìn)行了測(cè)試。 “Compatible”表示該庫(kù)應(yīng)在此OS版本上運(yùn)行(即,它不依賴于任何不可用的SDK功能),但不再經(jīng)過(guò)兼容性測(cè)試,可能需要進(jìn)行調(diào)整或修正錯(cuò)誤才能正常運(yùn)行。

ARC兼容性

從1.8版開始,iCarousel需要ARC。 如果要在非ARC項(xiàng)目中使用iCarousel,只需將-fobjc-arc編譯器標(biāo)志添加到iCarousel.m類。 為此,請(qǐng)轉(zhuǎn)到目標(biāo)設(shè)置中的“構(gòu)建階段”選項(xiàng)卡,打開“編譯源”組,雙擊列表中的iCarousel.m,然后在彈出窗口中鍵入-fobjc-arc。如果要將整個(gè)項(xiàng)目轉(zhuǎn)換為ARC,請(qǐng)注釋掉iCarousel.m中的#error行,然后在Xcode中運(yùn)行“Edit > Refactor > Convert to Objective-C ARC...”工具,并確保要轉(zhuǎn)換的所有文件 使用ARC進(jìn)行檢查(包括iCarousel.m)。

線程安全

iCarouselUIView的子類,和所有的UIKit組件一樣,它只能從主線程訪問(wèn)。 您可能希望使用線程加載或更新輪播內(nèi)容或項(xiàng)目,但始終確保一旦您的內(nèi)容加載,您在更新輪播之前切換回主線程。

變色龍支持

iCarousel現(xiàn)在與Chameleon iOS-to-Mac轉(zhuǎn)換庫(kù)(https://github.com/BigZaphod/Chameleon)兼容。 要使用iCarouselChameleon,請(qǐng)將USING_CHAMELEON添加到項(xiàng)目的預(yù)處理器宏中。 查看Chameleon Demo示例項(xiàng)目,了解如何使用Chameleon將iOS iCarousel應(yīng)用程序移植到Mac OS - 該示例演示如何使用Chameleon在Mac OS上運(yùn)行No Nib iPhone示例。 請(qǐng)注意,點(diǎn)擊中心當(dāng)前不起作用,滾動(dòng)操作必須使用雙指滾動(dòng)手勢(shì)進(jìn)行,而不是單擊拖動(dòng)(這兩個(gè)都是由于變色龍UIGestureRecognizer實(shí)現(xiàn)的功能/限制)。

視圖點(diǎn)擊檢測(cè)

在iOS上的iCarousel中,有兩種基本方法來(lái)檢測(cè)視圖上的點(diǎn)擊。 第一種方法是簡(jiǎn)單地使用輪播didSelectItemAtIndex:delegate方法,每次點(diǎn)擊一個(gè)項(xiàng)目時(shí)都會(huì)觸發(fā)。 如果您只需要對(duì)當(dāng)前居中的item進(jìn)行操作,可以將currentItemIndex屬性與此方法的index參數(shù)進(jìn)行比較。或者,如果您想要更多的控制,您可以提供UIButtonUIControl作為項(xiàng)目視圖,并自己處理觸摸交互。 有關(guān)如何完成此操作的示例,請(qǐng)參閱Buttons Demo示例項(xiàng)目(在Mac OS上不起作用)。您還可以在項(xiàng)目視圖中嵌套UIControls,并且將按預(yù)期接收觸摸(參見(jiàn)示例"Controls Demo")。如果您想檢測(cè)其他類型的互動(dòng),例如滑動(dòng),雙抽頭或長(zhǎng)按,最簡(jiǎn)單的方法是將UIGestureRecognizer附加到您的項(xiàng)目視圖或其子視圖在傳遞給carousel之前。

請(qǐng)注意,任何tapgestures在除中心item外的任何item將被忽略,除非你將centerItemWhenSelected屬性設(shè)置為NO

安裝

要在應(yīng)用程序中使用iCarousel類,只需將iCarousel類文件拖到您的項(xiàng)目中并添加QuartzCore框架。 您也可以按常規(guī)方式使用Cocoapods安裝它。

屬性和方法介紹

可選值(typedef NS_ENUM(NSInteger, iCarouselOption))

  • iCarouselOptionWrap
    當(dāng)carousel滾動(dòng)到末尾時(shí)是否循環(huán)滾動(dòng)的布爾值。 如果你想carousel在結(jié)束時(shí)循環(huán)滾動(dòng)則返回YES;如果你想其停止則返回NO。 通常,circular類型的carousel默認(rèn)情況下會(huì)自動(dòng)循環(huán)滾動(dòng),而linear類型的carousel則不會(huì)。 返回類型是浮點(diǎn)值,除0.0以外的任何值都將被視為YES。
  • iCarouselOptionShowBackfaces
    對(duì)于某些carousel類型,例如iCarouselTypeCylinder,可以看到某些視圖的背面(iCarouselTypeInvertedCylinder默認(rèn)情況下隱藏背面)。 如果您希望隱藏朝后的視圖,則可以為此選項(xiàng)返回NO。 要覆蓋iCarouselTypeInvertedCylinder的默認(rèn)背面隱藏,可以返回YES。 此選項(xiàng)也可用于由自定義的carousel的transforms而導(dǎo)致的顯示視圖背面的問(wèn)題。
  • iCarouselOptionOffsetMultiplier
    offset multiplier是在用戶拖動(dòng)carousel時(shí)使用的。 它不影響編程式滾動(dòng)或減速速度。 對(duì)于大多數(shù)carousel類型,默認(rèn)值為1.0,但是CoverFlow樣式的carousels默認(rèn)值為2.0(因?yàn)閕tem間隔較小,因此必須進(jìn)一步拖動(dòng)以移動(dòng)相同的距離)。
  • iCarouselOptionVisibleItems
    RotaryCylinderWheel改變時(shí)要顯示的items的數(shù)量。 通常,這是根據(jù)視圖尺寸和carousel中item的數(shù)量自動(dòng)計(jì)算的,但是如果您想更精確地控制carousel的展示,則可以重新賦值。 此屬性用于計(jì)算carousel的半徑,而另一個(gè)選擇是直接更改半徑。
  • iCarouselOptionCount
    RotaryCylinderWheel類型中顯示的 item 的數(shù)量。通常,這是根據(jù)輪播中的視圖大小和item 的數(shù)量自動(dòng)計(jì)算的,但如果要更精確地控制 carousel 的顯示,則可以重寫此選項(xiàng)。該屬性用于計(jì)算 carousel半徑,因此另一個(gè)選項(xiàng)是直接操作半徑。
  • iCarouselOptionArc
    RotaryCylinderWheel變換的弧度(以弧度為單位)。 通常,默認(rèn)值為2 * M_PI(一個(gè)完整的圓)。您也可以指定一個(gè)較小的值(例如,值M_PI將創(chuàng)建一個(gè)半圓或圓柱)。此屬性用于計(jì)算carousel半徑和角度步長(zhǎng),另一個(gè)選擇是直接更改這些值。
  • iCarouselOptionRadius
    RotaryCylinderWheel的半徑以pixelspoints為單位進(jìn)行轉(zhuǎn)換。 這個(gè)屬性通常會(huì)進(jìn)行計(jì)算以使可見(jiàn)的items適合指定的弧。 您可以修改這個(gè)值來(lái)增加或減少item的間距(和圓的半徑)。
  • iCarouselOptionAngle
    RotaryCylinderWheel變換中每個(gè)項(xiàng)目之間的角度步長(zhǎng)(以弧度為單位)。 在不更改半徑的情況下修改該值會(huì)在carousel的末端造成間隙或?qū)е耰tem重疊。
  • iCarouselOptionTilt
    應(yīng)用于CoverFlowCoverFlow2TimeMachine的carousel類型中非居中item的傾斜度。 此值應(yīng)在0.01.0的范圍內(nèi)。
  • iCarouselOptionSpacing
    item的間距。 該值乘以item的寬度(或高度,如果carousel是垂直的)以得到每個(gè)item之間的總間距,默認(rèn)值為1.0,表示視圖之間沒(méi)有間距(除非視圖已經(jīng)包含填充,就像在許多示例項(xiàng)目中的一樣)。
  • iCarouselOptionFadeMin && iCarouselOptionFadeMax && iCarouselOptionFadeRange && iCarouselOptionFadeMinAlpha
    這四個(gè)選項(xiàng)是基于其相對(duì)于當(dāng)前居中項(xiàng)目的偏移量控制carousel的item的淡出方式。 FadeMin是項(xiàng)目視圖開始淡入之前可以達(dá)到的最小負(fù)偏移量。 FadeMax是視圖開始淡入之前可以達(dá)到的最大正偏移量。 FadeRange是淡出發(fā)生的距離,以item寬度的倍數(shù)度量(默認(rèn)為1.0),FadeMinAlpha是視圖將淡入的最小alpha值(默認(rèn)為0.0,表示完全透明)。

  • (iCarouselType) type
    用來(lái)變換carousel展示樣式,type 樣式如下:
typedef NS_ENUM(NSInteger, iCarouselType){
iCarouselTypeLinear = 0,            //線性的 ---> [平鋪,不循環(huán)]
iCarouselTypeRotary,                //可旋轉(zhuǎn)的 ---> [外環(huán),層疊]
iCarouselTypeInvertedRotary,        //反向旋轉(zhuǎn)式 ---> [內(nèi)環(huán),層疊]
iCarouselTypeCylinder,              //圓柱式 ---> [外環(huán),拼接]
iCarouselTypeInvertedCylinder,      //反向圓柱式 ---> [內(nèi)環(huán),拼接]
iCarouselTypeWheel,                //車輪式 ---> [車輪,扇形,影響比較大]
iCarouselTypeInvertedWheel,        //反向車輪式 ---> [車輪,扇形,影響比較大]
iCarouselTypeCoverFlow,            //封面流 ---> [翻頁(yè),不循環(huán)]
iCarouselTypeCoverFlow2,            //封面流樣式2 ---> [翻頁(yè)2,不循環(huán)]
iCarouselTypeTimeMachine,          //時(shí)光機(jī) ---> [向上堆疊,不循環(huán)]
iCarouselTypeInvertedTimeMachine,  //反向時(shí)光機(jī) ---> [反堆疊,不循環(huán)]
iCarouselTypeCustom
};
  • (CGFloat) perspective
    用來(lái)稍稍調(diào)整在多種3D carousel視圖中視覺(jué)按照透視法縮短效果的,它應(yīng)該是一個(gè)負(fù)數(shù),值的范圍在-0.01 ~ 0(不包含 -0.01和 0),這個(gè)范圍之外的值將會(huì)產(chǎn)生非常奇怪的結(jié)果。默認(rèn)值是-1/500-0.005

  • (CGFloat) decelerationRate
    滑動(dòng)時(shí)carousel減速的速率。 值越高減速越慢。 默認(rèn)值為0.95。 值的范圍應(yīng)在0.0~1.00.0表示carousel在released時(shí)立即停止;1.0表示carousel持續(xù)滾動(dòng)且不會(huì)減速,除非到達(dá)終點(diǎn))。

  • (CGFloat) scrollSpeed
    用戶滑動(dòng)carousel時(shí)滑動(dòng)速度乘數(shù)。默認(rèn)值是1.0

  • (CGFloat) bounceDistance
    當(dāng)非循環(huán)的carousel滑動(dòng)超過(guò)末端時(shí)反彈的最大距離。 這是用itemWidth的倍數(shù)來(lái)衡量的,因此值1.0表示carousel會(huì)反彈一個(gè)完整的item寬度,值0.5則表示反彈item寬度的一半,依此類推。 默認(rèn)值為1.0

  • (BOOL) scrollEnabled
    使能或者禁止用戶滾動(dòng)carousel。如果這個(gè)值被設(shè)為NO,carousel仍然可以以編程方式被滾動(dòng)。

  • (BOOL) pagingEnabled
    啟用和禁用分頁(yè)。 啟用分頁(yè)后,carousel會(huì)在用戶滾動(dòng)時(shí)在每個(gè)item處停止,這與UIScrollView的pagesEnabled屬性非常相似。

  • (BOOL) vertical
    此屬性是切換carousel的在屏幕上的顯示方向(水平顯示或垂直顯示)。 所有內(nèi)置carousel類型都可以水平和垂直顯示。 可以通過(guò)更改carousel的布局或屏幕上的滑動(dòng)檢測(cè)方向來(lái)切換carousel到垂直方向。

    注意:自定義的carousel變換不受這個(gè)屬性影響,但切換手勢(shì)的方向仍然會(huì)受影響。

  • (BOOL) wrapEnabled
    如果啟用了循環(huán)滾動(dòng)則返回YES;否則,則返回NO。 該屬性是只讀的。 如果你想重新賦值,需要實(shí)現(xiàn)carousel:valueForOption:withDefault:委托方法,并為iCarouselOptionWrap返回一個(gè)值。

  • (BOOL) bounces
    設(shè)置carousel是否應(yīng)彈跳到結(jié)尾并返回或突然停止。

    注意:在carousel樣式設(shè)置為循環(huán)樣式時(shí)或者carouselShouldWrap代理方法返回為YES時(shí),這個(gè)屬性不起作用。

  • (CGFloat) scrollOffset
    carousel的current scroll offset,為itemWidth的倍數(shù)。 該值四舍五入到最接近的整數(shù),是currentItemIndex值。 當(dāng)carousel滑動(dòng)時(shí),您可以使用此值來(lái)定位其他屏幕元素。 如果希望以編程式將carousel滾動(dòng)到特定偏移也可以設(shè)置該值。 如果您希望禁用內(nèi)置手勢(shì)處理并提供自己的實(shí)現(xiàn)方式也可是使用該值。

  • (CGFloat) offsetMultiplier
    用戶拖動(dòng)carousel時(shí)使用的偏移乘數(shù)。 它不影響程序滾動(dòng)或減速速度。 對(duì)于大多數(shù)輪播類型,默認(rèn)值為1.0,但是CoverFlow樣式輪播的默認(rèn)值為2.0(因?yàn)閕tem間隔更近,因此必須進(jìn)一步拖動(dòng)以移動(dòng)相同的距離)。 您不能直接設(shè)置此屬性,但是可以通過(guò)實(shí)現(xiàn)carouselOffsetMultiplier:這個(gè)代理方法對(duì)該值重新賦值。

  • (CGSize) contentOffset
    此屬性用于調(diào)整carousel的item相對(duì)于carousel中心的偏移量。 默認(rèn)為CGSizeZero,表示carousel的items 居中。 更改此值將在不改變其角度的情況下移動(dòng)carousel的items,即消失點(diǎn)隨carousel的items一起移動(dòng),因此,如果您向下移動(dòng)carousel的items,它不會(huì)讓你看起來(lái)像是在俯視carousel。

  • (CGSize) viewpointOffset
    此屬性用于相對(duì)于carousel items調(diào)整用戶視點(diǎn)。 它與調(diào)整contentOffset具有相反的效果,即如果您將視點(diǎn)向上移動(dòng),則carousel會(huì)向下移動(dòng)。 與contentOffset不同,移動(dòng)視點(diǎn)還會(huì)更改相對(duì)于carousel items的透視消失點(diǎn),因此,如果將視點(diǎn)向上移動(dòng),則看起來(lái)就像在下面看carousel。

  • (NSInteger) numberOfItems
    carousel中items的數(shù)量(只讀)。 要進(jìn)行設(shè)置,請(qǐng)實(shí)現(xiàn)dataSource中numberOfItemsInCarousel:方法。

    注意:并非所有這些item都會(huì)在給定的時(shí)間點(diǎn)被加載或顯示(carousel在滾動(dòng)時(shí)根據(jù)需要加載項(xiàng)視圖)。

  • (NSInteger) numberOfPlaceholders
    在carousel中展示的占位視圖的數(shù)量(只讀)。可以通過(guò)實(shí)現(xiàn)numberOfPlaceholdersInCarousel:方法改變numberOfPlaceholders的值。

  • (NSInteger) currentItemIndex
    當(dāng)前carousel中居中的item 的索引,設(shè)置這個(gè)屬性相當(dāng)于調(diào)用scrollToItemAtIndex:animated:方法時(shí)將animated參數(shù)設(shè)置為NO

  • (UIView *) currentItemView
    當(dāng)前carousel中居中的item view。這個(gè)視圖的索引與currentItemIndex匹配。

  • (NSArray *) indexesForVisibleItems
    一個(gè)數(shù)組包含當(dāng)前在輪播中加載和顯示的所有項(xiàng)視圖的索引,包括占位符視圖。 該數(shù)組包含NSNumber對(duì)象,其整數(shù)值與視圖的索引匹配。 項(xiàng)視圖的索引從零開始,并匹配傳遞給dataSource的索引以加載視圖,但任何可見(jiàn)占位符視圖的索引將為負(fù)(小于零)或大于或等于numberOfItems。 此數(shù)組中占位符視圖的索引不等于與dataSource一起使用的占位符視圖索引。

  • (NSInteger) numberOfVisibleItems
    同時(shí)顯示在屏幕上的carousel itemviews的最大數(shù)量(只讀)。這個(gè)屬性對(duì)執(zhí)行最優(yōu)化很重要,且是基于carousel的樣式和視圖的frame被自動(dòng)計(jì)算的。如果你想重寫這個(gè)默認(rèn)值,實(shí)現(xiàn)carousel:valueForOption:withDefault:這個(gè)代理方法且給iCarouselOptionVisibleItems返回一個(gè)值。

  • (NSInteger) visibleItemViews
    一個(gè)存放當(dāng)前carousel中展示的所有item views的數(shù)組(只讀),它包括任何可見(jiàn)的占位視圖。這個(gè)數(shù)組中視圖的索引并不與item的索引匹配,但這些視圖的順序與visibleItemIndexes數(shù)組屬性中的順序匹配,你可以通過(guò)從visibleItemIndexes數(shù)組中去掉對(duì)應(yīng)的對(duì)象來(lái)在這個(gè)數(shù)組中獲取一個(gè)指定視圖的索引(或者,你可以僅僅用indexOfItemView:方法,這個(gè)會(huì)更簡(jiǎn)單)

  • (CGFloat) itemWidth
    carousel中展示的items的寬度(只讀)。這是自動(dòng)從使用carousel:viewForItemAtIndex:reusingView:數(shù)據(jù)源方法第一個(gè)傳到carousel中的視圖中繼承來(lái)的。你也可以使用carouselItemWidth:代理方法重寫這個(gè)值,這個(gè)方法會(huì)改變分配給carousel items的空間(但是不會(huì)對(duì)這些item views重寫設(shè)置大小或規(guī)模)。

  • (UIView *) contentView
    包含carousel item views的視圖。你可以增加子視圖如果你想用這些carousel items散置這些視圖。如果你想讓一個(gè)視圖出現(xiàn)在所有carouselitems的前邊或者后邊,你應(yīng)該直接添加它到iCarousel view本身來(lái)替代。

    注意:在contentView中視圖的順序是受當(dāng)app執(zhí)行時(shí)的頻率和未標(biāo)注的變化決定的。任何添加到contentView中的視圖應(yīng)該將他們的userInteractionEnabled屬性設(shè)置為NO,來(lái)防止和iCarousel的觸摸時(shí)間處理放生沖突。

  • (CGFloat) toggle
    這個(gè)屬性用于iCarouselTypeCoverFlow2carousel變換。它是被暴露的以便于你可以使用carousel:itemTransformForOffset:baseTransform:代理方法實(shí)現(xiàn)自己的CoverFlow2樣式變量。

  • (BOOL) stopAtItemBoundary
    默認(rèn)情況下,carousel被輕擊時(shí)會(huì)停在一個(gè)準(zhǔn)確的item邊界。如果你設(shè)置這個(gè)值為no,他會(huì)自然停止,如果scrollToItemBoundary被設(shè)置為yes會(huì)滾回或者向前滾動(dòng)到最接近的邊界。

  • (BOOL) scrollToItemBoundary
    默認(rèn)情況下,不管carousel何時(shí)停止移動(dòng),他會(huì)自動(dòng)滾動(dòng)到最近的item邊界。如果你設(shè)置這個(gè)屬性為nocarousel停止后將不會(huì)滾動(dòng)且不管在哪兒他都會(huì)停下來(lái),即使它不是正好對(duì)準(zhǔn)當(dāng)前的索引。有一個(gè)特例是如果打包效果被禁止且bounces被設(shè)置為yes,當(dāng)它停下來(lái)時(shí)超出了carousel的底部,carousel會(huì)自動(dòng)滾回第一個(gè)或者最后一個(gè)索引 。

  • (BOOL) ignorePerpendicularSwipes
    如果為yescarousel將會(huì)忽略垂直于carousel方向的切換手勢(shì)。目前,一個(gè)水平的carousel,垂直切換將不會(huì)被攔截。這就意味著你可以獲得一個(gè)在carouselitem view里垂直滾動(dòng)的scrollView,它依然會(huì)正確工作。默認(rèn)值為yes

  • (BOOL) centerItemWhenSelected
    當(dāng)設(shè)置為yes時(shí),點(diǎn)擊任何在carousel中的item而不是那個(gè)匹配currentItemIndex的視圖,將會(huì)使平滑動(dòng)畫移動(dòng)到居中位置。點(diǎn)擊當(dāng)前被選中的item將沒(méi)有效果。默認(rèn)值是yes

  • - (void) scrollByOffset:(CGFloat)offset duration:(NSTimeInterval)duration;
    這個(gè)方法作用與scrollByNumberOfItems:方法一樣,但是允許你滾動(dòng)到一個(gè)微小數(shù)量的items。如果你想達(dá)到一個(gè)非常準(zhǔn)確的動(dòng)畫效果時(shí)可能有用。

    注意:如果scrollToItemBoundary屬性被設(shè)置為yes,在你調(diào)用這個(gè)方法后carousel無(wú)論如何會(huì)自動(dòng)滾動(dòng)到最近一個(gè)item索引。

  • - (void) scrollToOffset:(CGFloat)offset duration:(NSTimeInterval)duration;
    這個(gè)方法工作起來(lái)和scrollToItemAtIndex:方法一樣,但是允許你移動(dòng)到一個(gè)微小的偏移。如果你想達(dá)到一個(gè)非常準(zhǔn)確的動(dòng)畫效果時(shí)這個(gè)可能有用。

    注意:如果scrollToItemBoundary屬性被設(shè)置為yes,當(dāng)你調(diào)用這個(gè)方法之后carousel會(huì)自動(dòng)滾動(dòng)到最近的item索引。

  • - (void) scrollByNumberOfItems:(NSInteger)itemCount duration:(NSTimeInterval)duration;
    這個(gè)方法允許你使用一個(gè)固定的距離滾動(dòng)carousel,以carouselitem寬度來(lái)衡量。
    整數(shù)或負(fù)數(shù)可能由itemCount來(lái)具體確定,取決于你希望滾動(dòng)的方向。
    iCarousel很好的處理了邊界問(wèn)題,
    所以如果你指定了一個(gè)大于carouselitems數(shù)量的值,
    滾動(dòng)或者在到達(dá)carousel底部時(shí)被夾緊(如果打包被禁止),或者無(wú)停頓地包裹。

  • - (void) scrollToItemAtIndex:(NSInteger)index duration:(NSTimeInterval)duration;
    這個(gè)方法允許你來(lái)控制carousel使用 多長(zhǎng)時(shí)間來(lái)滾動(dòng)到特定的索引。

  • - (void) scrollToItemAtIndex:(NSInteger)index animated:(BOOL)animated;
    這個(gè)方法會(huì)使carousel居中在一個(gè)特定的item, 立即或者使用一個(gè)平滑的動(dòng)畫。對(duì)于打包的carouselscarousel將會(huì)自動(dòng)決定滾動(dòng)的最短(直線會(huì)或者包著的)距離。如果你需要控制這個(gè)滾動(dòng)的方向,或者想滾動(dòng)多于一個(gè)分辨率,使用scrollByNumberOfItems這個(gè)方法。

  • - (UIView *) itemViewAtIndex:(NSInteger)index;
    返回帶有指定索引的可見(jiàn)的item視圖。

    注意:這個(gè)索引和carousel的位置有關(guān),且不是在visibleItemViews數(shù)組中的位置,這可能是不一樣的。傳遞一個(gè)賦值或者一個(gè)大于等于numberOfItems的整數(shù)來(lái)取回占位視圖。這個(gè)方法只有在是可見(jiàn)視圖且情況下才工作,且如果這個(gè)在指定索引處的視圖還沒(méi)被加載時(shí),或者這個(gè)索引超出范圍時(shí),將返回空。

  • - (NSInteger) indexOfItemView:(UIView *)view;
    這個(gè)是carousel中指定item view的索引。對(duì)item viewsplaceholder views起作用,但是,placeholder view索引并不和數(shù)據(jù)源中的索引匹配,且有可能是負(fù)值(查看上面indexesForVisibleItems屬性介紹的細(xì)節(jié))。這個(gè)方法只對(duì)可見(jiàn)的item views起作用且對(duì)目前沒(méi)有加載的視圖會(huì)返回NSNotFound。對(duì)于一列所有加載的視圖,使用visibleItemViews屬性。

  • - (NSInteger) indexOfItemViewOrSubview:(UIView *)view;
    這個(gè)方法給你或者是傳遞的視圖或者是包含有作為參數(shù)的視圖的視圖的item索引。它通過(guò)以傳遞進(jìn)來(lái)的視圖為開始,向上遍歷視圖層級(jí),直到找到一個(gè)itemview并返回他在carousel中的索引。如果沒(méi)有找到當(dāng)前加載的item view,它會(huì)返回NSNotFound。這個(gè)方法對(duì)處理一個(gè)item view內(nèi)嵌的事件控制極其有用。它允許你綁定你的在控制器中控制單一行為方法的item,且會(huì)找出控制觸發(fā)相關(guān)行為的item。詳見(jiàn)Controls Demo example

  • - (CGFloat) offsetForItemAtIndex:(NSInteger)index;
    返回以itemWidth整數(shù)倍來(lái)記的指定的item索引處的偏移量。這是用于計(jì)算視圖變換和alpha的相同值,可以用于根據(jù)carousel的位置自定義項(xiàng)目視圖。每當(dāng)調(diào)用carouselDidScroll:delegate方法時(shí),這個(gè)值都可以改變。

  • - (UIView *) itemViewAtPoint:(CGPoint)point;

  • - (void) removeItemAtIndex:(NSInteger)index animated:(BOOL)animated;
    這會(huì)從carousel移除一個(gè)item,剩下的項(xiàng)目將滑過(guò)來(lái)填補(bǔ)空位。

    注意:當(dāng)該方法被指定時(shí),數(shù)據(jù)源不會(huì)自動(dòng)更新,因此后續(xù)調(diào)用reloadData將恢復(fù)已刪除的項(xiàng)目。

  • - (void) insertItemAtIndex:(NSInteger)index animated:(BOOL)animated;
    這將一個(gè)item插入carousel。 新的item將從數(shù)據(jù)源中請(qǐng)求,因此,在調(diào)用此方法之前,請(qǐng)確保已將新項(xiàng)目添加到數(shù)據(jù)源數(shù)據(jù),否則在carouselitem復(fù)用或其他問(wèn)題。

  • - (void) reloadItemAtIndex:(NSInteger)index animated:(BOOL)animated;
    此方法將重新加載指定的item。 新item將從數(shù)據(jù)源請(qǐng)求。 如果animated參數(shù)為YES,則會(huì)從舊到新的item視圖交叉淡化,否則會(huì)立即交換。

  • - (void) reloadData;
    這個(gè)方法重新從數(shù)據(jù)源加載carousel視圖并刷新carousel的顯示。


iCarouselDataSource 代理方法

  • - (NSInteger) numberOfItemsInCarousel:(iCarousel *)carousel;
    返回carousel中界面的數(shù)量
  • - (UIView *) carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view;
    返回一個(gè)在carousel中要在指定索引處顯示的視圖,reusingView參數(shù)的作用就像UIPickerView,之前在carousel中展示過(guò)的界面被傳遞到方法中來(lái)循環(huán)使用。如果這個(gè)參數(shù)不是空,你可以設(shè)置它的屬性并返回它而不是創(chuàng)建一個(gè)新的視圖實(shí)例,這樣可以稍改善性能。與UITableView不同,這里沒(méi)有重用id來(lái)區(qū)分不同的carousel界面類型。所以如果你的carousel包含多個(gè)不同的視圖類型,那么每次這個(gè)方法被調(diào)用的時(shí)候,你應(yīng)該只是忽略這個(gè)參數(shù)并返回一個(gè)新的視圖。你應(yīng)該確認(rèn)carousel:viewForItemAtIndex:reusingView:方法每次被調(diào)用時(shí),它要么返回重用的視圖,要么返回一個(gè)新的視圖實(shí)例而不是保留你自己的循環(huán)視圖池,因?yàn)椴煌?code>carousel界面索引返回多個(gè)相同視圖的復(fù)制品可能造成顯示問(wèn)題。
  • - (NSInteger) numberOfPlaceholdersInCarousel:(iCarousel *)carousel;
    返回在carousel中展示的占位視圖。占位視圖用來(lái)當(dāng)carousel中界面太少而不能填滿carousel的寬度,并且你希望在空白的地方顯示一些東西時(shí)使用。它們隨著carousel移動(dòng)并且像其他carousel界面一樣運(yùn)行,但是它們不占numberOfItems數(shù)量,且不能被設(shè)置為當(dāng)前選中的界面。當(dāng)打包屬性被使能時(shí)占位視圖被隱藏。占位視圖或者顯示在carousel界面的任何一方。對(duì)于n個(gè)占位視圖,前n/2個(gè)界面將會(huì)出現(xiàn)在界面視圖的左邊,下一個(gè)n/2個(gè)界面會(huì)出現(xiàn)在右邊。你可以有奇數(shù)個(gè)占位視圖,這種情況下carousel會(huì)是不對(duì)稱的。
  • - (UIView *) carousel:(iCarousel *)carousel placeholderViewAtIndex:(NSInteger)index reusingView:(UIView *)view;
    返回一個(gè)視圖作為占位符視圖。 工作方式與carousel:viewForItemAtIndex:reusingView:相同。reusingView的占位視圖存儲(chǔ)在單獨(dú)的池中,用于常規(guī)輪播的重用視圖,因此如果您的占位符視圖與項(xiàng)目視圖不同,則不會(huì)出現(xiàn)問(wèn)題。

iCarouselDelegate 代理方法

  • - (void) carouselWillBeginScrollingAnimation:(iCarousel *)carousel;
    只要carousel開始動(dòng)畫,就會(huì)調(diào)用此方法。在用戶滾動(dòng)carousel后,可以編程或自動(dòng)觸發(fā),因?yàn)檩啿ブ匦聦?duì)齊本身。
  • - (void) carouselDidEndScrollingAnimation:(iCarousel *)carousel;
    當(dāng)carousel結(jié)束動(dòng)畫時(shí),會(huì)調(diào)用此方法
  • - (void) carouselDidScroll:(iCarousel *)carousel;
    無(wú)論何時(shí)滾動(dòng)都會(huì)調(diào)用此方法。無(wú)論輪播是以編程方式滾動(dòng)還是通過(guò)用戶交互來(lái)調(diào)用它。
  • - (void) carouselCurrentItemIndexDidChange:(iCarousel *)carousel;
    當(dāng)carousel滾動(dòng)導(dǎo)致currentItemIndex屬性更改足夠大時(shí),就會(huì)調(diào)用此方法。無(wú)論itemindex是按程序更新還是通過(guò)用戶交互來(lái)調(diào)用。
  • - (void) carouselWillBeginDragging:(iCarousel *)carousel;
    當(dāng)用戶開始拖動(dòng)carousel,會(huì)調(diào)用此方法。如果用戶點(diǎn)擊carousel,或者如果carousel以編程式滑動(dòng),則不會(huì)觸發(fā)。
  • - (void) carouselDidEndDragging:(iCarousel *)carousel willDecelerate:(BOOL)decelerate;
    當(dāng)用戶停止拖動(dòng)carousel時(shí),會(huì)調(diào)用此方法。
    willDecelerate參數(shù)指示carousel是否足夠快地行進(jìn),以便在停止之前需要減速(即當(dāng)前的索引不一定是它將停止的),或者它將停止在哪里。

    注意:即使willDecelerateNO時(shí)輪播仍將自動(dòng)滾動(dòng),直到它完全對(duì)準(zhǔn)當(dāng)前索引。 如果您需要知道何時(shí)完全停止移動(dòng),請(qǐng)使用carouselDidEndScrollingAnimation委托方法。

  • - (void) carouselWillBeginDecelerating:(iCarousel *)carousel;
    當(dāng)carousel完成減速時(shí),會(huì)調(diào)用此方法,您可以理解為此時(shí)的currentItemIndex是最終的停止值。 與以前的版本不同,在大多數(shù)情況下,carousel現(xiàn)在將停止在最終的索引位置。 唯一的例外是啟用彈跳的非包裝carousel,其中,如果最終停止位置超出carousel的終點(diǎn),則carousel將自動(dòng)滾動(dòng),直到其完全對(duì)準(zhǔn)結(jié)束索引。為了向后兼容,carousel將始終調(diào)用scrollToItemAtIndex:animated:在完成減速后。如果您需要知道carousel全停止移動(dòng)的時(shí)間,請(qǐng)使用carouselDidEndScrollingAnimation委托方法。
  • - (BOOL) carousel:(iCarousel *)carousel shouldSelectItemAtIndex:(NSInteger)index;
    如果用戶點(diǎn)擊任何輪播項(xiàng)目視圖(不包括占位符視圖),包括當(dāng)前選定的視圖,此方法將觸發(fā)。 方法的目的是忽略旋轉(zhuǎn)木馬上的輕拍(tap)事件。 如果返回YES或不實(shí)現(xiàn),則tap將按照正常的方式進(jìn)行處理,而轉(zhuǎn)盤didSelectItemAtIndex:方法將被調(diào)用。 如果返回NO,輪播將忽略輕拍(tap)事件,它將繼續(xù)傳播到下一視圖層級(jí)。這是防止carousel終止由另一種視圖進(jìn)行處理的輕拍(tap)事件的方法。
  • - (void) carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index;
    如果用戶點(diǎn)擊任何輪播項(xiàng)目視圖(不包括占位符視圖),包括當(dāng)前選定的視圖,此方法將觸發(fā)。 如果用戶點(diǎn)擊當(dāng)前所選視圖中的控件(即作為UIControl的子類的任何視圖),此方法將不會(huì)觸發(fā)。
  • - (CGFloat) carouselItemWidth:(iCarousel *)carousel;
    返回carousel中每個(gè)項(xiàng)目的寬度,即每個(gè)item的間距。如果方法未實(shí)現(xiàn),則默認(rèn)為由carousel返回的第一個(gè)item的寬度:viewForItemAtIndex:reusingView:的dataSource方法。 如果從carousel返回的視圖:viewForItemAtIndex:reusingView:不正確(例如,如果視圖的大小不同,或者在其背景圖像中包含影響其影子的陰影或外部陰影,則此方法僅應(yīng)用于裁剪或填充項(xiàng)目視圖size)。如果你只想放大視圖,那么最好使用iCarouselOptionSpacing值。
  • - (CATransform3D) carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform;
    此方法可用于為每個(gè)carousel視圖提供自定義變換。offset是視圖與傳送帶中間的距離。當(dāng)前中心的item視圖的offset0.0,右邊的offset1.0,左側(cè)的offset-1.0,依此類推。為了實(shí)現(xiàn)線性輪播樣式,因此,您只需將offset乘以項(xiàng)寬,并將其用作變換的x值即可。僅當(dāng)輪播類型為iCarouselTypeCustom時(shí),才會(huì)調(diào)用此方法。
  • - (CGFloat) carousel:(iCarousel *)carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value;
    此方法用于定制標(biāo)準(zhǔn)carousel的參數(shù)類型。 通過(guò)實(shí)現(xiàn)這種方法,您可以調(diào)整選項(xiàng),例如圓形轉(zhuǎn)盤中顯示的項(xiàng)目數(shù)量或封面流轉(zhuǎn)盤中的傾斜量,以及轉(zhuǎn)盤是否換行,以及是否應(yīng)在最終淡出等。 對(duì)于任何選項(xiàng),您對(duì)調(diào)整不感滿意,只需返回默認(rèn)值即可。 這些選項(xiàng)的含義列在下面的iCarouselOption值下。 在Options Demo中查看該方法的高級(jí)用法。
  • - (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index;
    如果用戶點(diǎn)擊任何carousel item視圖(不包括占位符視圖),包括當(dāng)前選定的視圖,則將觸發(fā)此方法。 如果用戶在當(dāng)前選定的視圖(即,作為UIControl的子類的任何視圖)中點(diǎn)擊控件,該方法將不會(huì)觸發(fā)。
  • - (BOOL)carousel:(iCarousel *)carousel shouldSelectItemAtIndex:(NSInteger)index;
    如果用戶點(diǎn)擊任何carousel item視圖(不包括占位符視圖),包括當(dāng)前選定的視圖,則將觸發(fā)此方法。 此方法的目的是使您有機(jī)會(huì)忽略carousel上的點(diǎn)擊。 如果從該方法返回YES或未實(shí)現(xiàn),則將按常規(guī)處理點(diǎn)擊事件并調(diào)用carousel:didSelectItemAtIndex:方法。 如果返回NO,carousel將忽略點(diǎn)擊事件,它將繼續(xù)沿視圖層次結(jié)構(gòu)傳播。 這是防止carousel攔截其他視圖要處理的點(diǎn)擊事件的好方法。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • typedef NS_ENUM(NSInteger, iCarouselType){ iCarouselTypeL...
    黎明s閱讀 1,655評(píng)論 0 1
  • Documentation Supported OS & SDK Versions 支持的OS & SDK版本 S...
    c5550ea746f8閱讀 4,390評(píng)論 0 2
  • iOS開源類iCarousel介紹 iCarousel是一個(gè)類,它繼承于UIView,用于簡(jiǎn)化實(shí)現(xiàn)各種類型的旋轉(zhuǎn)木...
    踏歌尋方閱讀 16,713評(píng)論 12 43
  • 傳統(tǒng)模式下的開發(fā)MVCMVVM基于面向協(xié)議MVP的介紹MVP實(shí)戰(zhàn)開發(fā)說(shuō)在前面:相信就算你是個(gè)iOS新手也應(yīng)該聽說(shuō)過(guò)...
    行走的菜譜閱讀 3,181評(píng)論 1 5
  • 很多想做的事,好不容易鼓足勇氣卻因?yàn)橛腥苏境鰜?lái)“好言相勸”而偃旗息鼓。 很多購(gòu)物車?yán)锏臇|西,訂單下了好多次結(jié)算時(shí)看...
    林安澤閱讀 112評(píng)論 0 0