2015-03-20 4 views
1

Я хочу сделать карусель с линейным WITH wrap включенным (так что вы можете прокручивать бесконечно в любом направлении, и он будет просто обертываться). У них есть CarouselType.Linear, но он не включен , Кто-нибудь знает, как это сделать с iCarousel или UICollectionViews? Я не могу найти какие-либо хорошие ресурсы о том, как создать пользовательский макет iCarousel ... Есть ли хорошие ссылки?Linear Carousel with wrap enabled

Alliance Carousel

 this.Carousel = new CarouselView(frame) 
     { 
      DataSource = new CylindericalDataSource(this), 
      Delegate = new CylindericalDelegate(this) 
     }; 
     this.Carousel.CarouselType = CarouselType.Linear; 
     this.Carousel.ConfigureView(); 
     this.View.AddSubview(this.Carousel); 

------------ EDIT --------------

Чтобы ответить на вопрос @ Рахул в

public override void DidScroll (CarouselView carouselView) 
    { 
     base.DidScroll (carouselView); 

     nint numOfItems = carouselView.NumberOfItems; 
     if (this._parentController != null && 
      this._parentController._studioViewController != null && 
      this._parentController._studioViewController.SuccessfullyReceivedProjectAndPageData() && 
      this._parentController._studioViewController.HasFlowCardCarouselFinishedLoading() && 
      numOfItems > 0) 
     { 
      // Enforce min and max values fro ScrollOffset so the user can't scroll the carousel off screen. This is required when wrapping is turned off. 
      nfloat maxScrollOffset = ((nfloat)numOfItems) - 1f; 
      nfloat minScrollOffset = 0f; 
      if (carouselView.ScrollOffset < minScrollOffset) 
      { 
       carouselView.ScrollOffset = minScrollOffset; 
      } 
      if (carouselView.ScrollOffset > maxScrollOffset) 
      { 
       carouselView.ScrollOffset = maxScrollOffset; 
      } 
     } 
    } 

ответ

2

Обдумал это. Переопределите метод ValueForOption и заставьте CarouseOption.Wrap равным 1.0f. См. Ниже

/*--------------------------------------------------------------------------------*/ 
    // Class: CylindericalDelegate 
    /*--------------------------------------------------------------------------------*/ 

    public class CylindericalDelegate : CarouselViewDelegate 
    { 

     /*--------------------------------------------------------------------------------*/ 
     // Constructors 
     /*--------------------------------------------------------------------------------*/ 

     public CylindericalDelegate() 
     { 
     } 

     /*--------------------------------------------------------------------------------*/ 
     // CylindericalDelegate Implementation 
     /*--------------------------------------------------------------------------------*/ 

     public override nfloat ValueForOption(CarouselView carousel, CarouselOption option, nfloat aValue) 
     { 
      if (option == CarouselOption.Spacing) 
      { 
       return aValue * 1.1f; 
      } 
      if (option == CarouselOption.Wrap) 
      { 
       return 1.0f; 
      } 
      return aValue; 
     } 

     /*--------------------------------------------------------------------------------*/ 

    } 

    /*--------------------------------------------------------------------------------*/ 
+0

спасибо .. а что, если я хочу остановить карусель на последнем изображении/слайде? –

+0

К сожалению, это не встроено при использовании этого. Я прикрепил свой код, который был ответственным за это поведение остановки на последнем изображении. Вы должны переопределить DidScroll и использовать его самостоятельно, используя ScrollOffset. Функция scrollOffset основана на индексах, а не на фрейме. – LampShade