2013-10-29 51 views
2

我正在使用iCarousel來滾動圖像。該代碼是:iCarousel不順利

- (CATransform3D)carousel:(iCarousel *)_carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform 
{ 
    CGFloat count = 5; 
    CGFloat spacing = 0.9f; 
    CGFloat arc = M_PI * 0.3f; 
    CGFloat radius = fmaxf(140.0 * spacing/2.0f, 140.0 * spacing/2.0f/tanf(arc/2.0f/count)); 
    CGFloat angle = offset/count * arc; 
    radius = -radius; 
    angle = -angle; 
    transform = CATransform3DTranslate(transform, radius * sin(angle),radius * cos(angle) - radius, 0.0f);      
    return transform;              
} 

但是當我滾動圖像有一個醜陋的效果,過渡不平滑,圖像出來,在一個生澀的方式,但我想smootly出來。你可以幫我嗎?謝謝。

編輯:問題是,當我滾動圖像時,轉換不平滑,圖像在背面圖像前出現,與其他圖像分離。實際上,只有當滾動結束並且這會導致不好的效果時,圖像纔出現在其他圖像的前面。

回答

5

我們在上次實現iCarousel時遇到過類似的問題。下面是我們如何解決它:

- (CGFloat)carousel:(iCarousel *)carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value { 

    if (option == iCarouselOptionSpacing) { 
    return value;// * 1.05f; 
    } else if(option == iCarouselOptionWrap) { 
    return NO; 
    } else if(option == iCarouselOptionVisibleItems) { 
    return 3; 
    } 
    return value; 
} 

具體來說,你可能需要的是最後一個如果我們指定可見項的數量的語句。它默認爲1,這意味着當您滑過新圖像時會以一種乾脆的方式出現。通過指定3,您可以確保最先前的項目,當前項目和下一個項目始終加載到內存中,因此它們之間的滾動始終平滑。如果這不能解決您的問題,請將數字3增加到任何作品。

此外,不要忘記將iCarousel的代表設置爲self。

祝你好運。

+0

謝謝,但可能我沒有解釋清楚我的問題。問題是,當中心圖像出現在其他圖像的前面時,會產生醜陋的效果。中央圖像不是順利出現,而是與其他圖像分離。 – Anna565

+0

另一個問題可能是旋轉木馬視圖不佔用屏幕的整個寬度。儘管我可能不完全理解你的問題。你能發佈你的問題的截圖嗎? – eckyzero

+0

我無法發佈屏幕,因爲只有在滾動圖像時問題才明顯。中央圖像以平坦的方式出現在其他圖像的前面。 – Anna565