UIView 作为轮播的项目

UIView as items of a carousel

我想在我的 objective-c 应用程序中使用轮播。我有一个包含 UIView(具有特定宽度和高度)的 UIViewController。这个 UIView 的内容必须是一个旋转木马:我的旋转木马的每个项目都应该有一个图像和一些文本。我还想在旋转木马下有点(小圆圈)。这些点表示项目的数量,当前项目的点应该与其他点有不同的颜色。我发现最著名的轮播库是iCarousel

我的问题: 如何使用将 UIView 作为项目的 iCarousel?

编辑:

我将 iCarousel 添加到我的项目中,将 iCarousel 作为故事板中我的 UIView 的子类 @property (weak, nonatomic) IBOutlet iCarousel *carouselView;。然后在 myViewController.h 我添加了 @interface myViewController : UIViewController<iCarouselDataSource>

myViewController.m中:

    - (NSInteger)numberOfItemsInCarousel:(iCarousel *)carousel
    {
        return 4;
    }

-(UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view {

    self.carouselTitle.text = [self.titleDataSource objectAtIndex:index];
    self.carouselImage.image = [UIImage imageNamed:[self.imageDataSource objectAtIndex:index]];

    return self.carouselView;
}

现在的问题是,当我 运行 我的应用程序时,它在 iCarousel.m 中提到这一行时崩溃:[_contentView addSubview:[self containView:view]];(第 1260 行)

有什么帮助吗?

iCarousel 使用数据源(类似于 UITableView),您需要实现它。主要方法

    -(UIView)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view

让您即时为每个项目创建视图。如果需要,您可以忽略 reusingView,但如果轮播中的所有视图都是同一类型,那么在其上设置属性和 return 它会比创建新视图更快。

看样例:https://github.com/nicklockwood/iCarousel/blob/master/Examples/Basic%20iOS%20Example/iCarouselExampleViewController.m

您需要:

  1. 实施iCarouselDataSource
  2. 将轮播数据源设置为 viewController(示例在 XIB 中执行此操作)
  3. 实现数据源方法numberOfItemsInCarouselviewForItemAtIndex...

编辑后的问题回复:

您应该 return 新视图只代表项目的单个轮播卡片,而不是 self.carouselView。它应该是一个全新分配的对象或传入的 reusingView:view,您可以更改其属性(它向您传递已离开屏幕并可以更新的旧视图)。

我强烈建议您查看项目中的示例(尤其是 Basic 示例)和 运行 并理解它们。