UIView作为旋转木马的项目

时间:2017-01-26 16:17:08

标签: ios objective-c uiview carousel icarousel

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

我的问题: 如何使用带有UIViews的iCarousel作为项目?

修改:

我将iCarousel添加到我的项目中,将iCarousel作为我的UIView的子类,在storyboad中为@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行)

请帮忙吗?

1 个答案:

答案 0 :(得分:1)

iCarousel使用您需要实现的dataSource(类似于UITableView)。主要方法

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

允许您动态创建每个项目的视图。如果需要,可以忽略reusingView,但如果轮播中的所有视图都是相同的类型,那么在它上面设置属性并返回它而不是创建新属性会更快。

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

你需要:

  1. 实施iCarouselDataSource
  2. 将轮播数据源设置为viewController(示例在XIB中执行此操作)
  3. 实施dataSource方法numberOfItemsInCarouselviewForItemAtIndex...
  4. 编辑问题回复:

    您应该返回仅代表该项目的单个轮播卡的新视图,而不是self.carouselView。它应该是一个完全新分配的对象或传入的reusingView:view,你可以改变它的属性(它传递你已经离屏并可以更新的旧视图)。

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