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 它会比创建新视图更快。
您需要:
- 实施
iCarouselDataSource
- 将轮播数据源设置为 viewController(示例在 XIB 中执行此操作)
- 实现数据源方法
numberOfItemsInCarousel
和viewForItemAtIndex...
编辑后的问题回复:
您应该 return 新视图只代表项目的单个轮播卡片,而不是 self.carouselView
。它应该是一个全新分配的对象或传入的 reusingView:view
,您可以更改其属性(它向您传递已离开屏幕并可以更新的旧视图)。
我强烈建议您查看项目中的示例(尤其是 Basic 示例)和 运行 并理解它们。
我想在我的 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 它会比创建新视图更快。
您需要:
- 实施
iCarouselDataSource
- 将轮播数据源设置为 viewController(示例在 XIB 中执行此操作)
- 实现数据源方法
numberOfItemsInCarousel
和viewForItemAtIndex...
编辑后的问题回复:
您应该 return 新视图只代表项目的单个轮播卡片,而不是 self.carouselView
。它应该是一个全新分配的对象或传入的 reusingView:view
,您可以更改其属性(它向您传递已离开屏幕并可以更新的旧视图)。
我强烈建议您查看项目中的示例(尤其是 Basic 示例)和 运行 并理解它们。