8

I have set images in iCarousel. When I scroll the carousel, it shows images in front and back. I do not want to display images in back. Please help. Thank you.

Simon
  • 25,468
  • 44
  • 152
  • 266
iPhone Developer
  • 459
  • 1
  • 5
  • 14

6 Answers6

8

You should implement the delegate:

- (CGFloat)carousel:(iCarousel *)_carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value{
 switch (option)
 {
    case iCarouselOptionVisibleItems:
    {
        return numberOfItemsIntheFront;
    }
 }
}
dtochetto
  • 676
  • 6
  • 8
4

You'll need to change to a custom carousel type, and copy the implementation of iCarouselTypeRotary in your delegate. Then implement -carousel:itemAlphaForOffset: so that items around the back have an alpha of zero.

Simon
  • 25,468
  • 44
  • 152
  • 266
3

In the latest version of iCarousel, the easiest way to do this is to set view.layer.doubleSided = NO on your carousel item views, or to use the iCarouselOptionShowBackfaces property, like this:

- (CGFloat)carousel:(iCarousel *)_carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value
{
    switch (option)
    {
        case iCarouselOptionShowBackfaces:
        {
            return NO;
        }
        default:
        {
            return value;
        }
    }
 }
Nick Lockwood
  • 40,865
  • 11
  • 112
  • 103
  • 2
    I tried this but the views are still visible. If I understand the question correctly, the OP (and myself) are trying to hide the views that are behind the front views. – daveMac Apr 24 '14 at 13:41
  • Try setting the iCarouselOptionShowBackfaces to NO. – Nick Lockwood Apr 24 '14 at 14:50
2

Code below will nicely fade away items that are going to the back. Enjoy.

func carousel(carousel: iCarousel, valueForOption option: iCarouselOption, withDefault value: CGFloat) -> CGFloat
{
    if (option == .Spacing)
    {
        return value * 1.1
    }
    else if (option == .FadeMin)
    {
        return 0;
    }
    else if (option == .FadeMax)
    {
        return 0;
    }
    else if (option == .FadeRange)
    {
        return 3;
    }

    return value
}
Rafał Sroka
  • 39,540
  • 23
  • 113
  • 143
0

I tried the solution suggested by @NickLockwood but doesn't seem to work :-( I added it to both methods in viewForItemAtIndex & placeholderViewAtIndex. My image size is 115*115 pixels and canvas size is 146*146 pixels. However, setting a return value of 'return value * 0.82f;' under iCarouselOptionSpacing (inside the method valueForOption) did the trick for me.

kkuldeep
  • 19
  • 2
  • It sounds like you're trying to solve a different problem than the one asked in the question. I don't see how changing the spacing could affect whether backward-facing items are visible o_O – Nick Lockwood Feb 27 '14 at 11:42
0

The easiest way to hide the background images

 func carousel(_ carousel: iCarousel, valueFor option: iCarouselOption, withDefault value: CGFloat) -> CGFloat {
    switch option {
    case .spacing:
        
        return 1.05
        
    case .visibleItems:
        
        return 3

    default:
        return value
  
ALOK RANJAN
  • 9
  • 1
  • 2