UIView 作为轮播的项目
Posted
技术标签:
【中文标题】UIView 作为轮播的项目【英文标题】:UIView as items of a carousel 【发布时间】:2017-01-26 16:17:08 【问题描述】:我想在我的 Objective-C 应用程序中使用轮播。我有一个 UIViewController 包含一个 UIView (具有特定的宽度和高度)。这个 UIView 的内容必须是一个轮播:我的轮播的每个项目都应该有一个图像和一些文本。我也想在旋转木马下,点(小圆圈)。这些点表示项目的数量,当前项目的点应该具有与其他点不同的颜色。我发现最著名的轮播库是iCarousel。
我的问题: 如何使用具有 UIViews 作为项目的 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 行)
有什么帮助吗?
【问题讨论】:
(2) 不是问题,请改写 (3) 与 *** 无关——可能应该删除它 @AshleyMills 请看我的编辑 【参考方案1】:iCarousel 使用您需要实现的数据源(类似于 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
你需要:
-
实施
iCarouselDataSource
将轮播数据源设置为 viewController(示例在 XIB 中执行此操作)
实现数据源方法numberOfItemsInCarousel
和viewForItemAtIndex...
已编辑的问题回复:
您应该返回仅代表该项目的单个轮播卡片的新视图,而不是 self.carouselView
。它应该是一个全新分配的对象或传入的reusingView:view
,您可以更改其属性(它传递给您的旧视图已经离开屏幕并且可以更新)。
我强烈建议您查看项目中的示例(尤其是 Basic 示例)并运行并理解它们。
【讨论】:
感谢您的回答。对于第二个问题,我的意思是 iCarousel 支持的构建目标是 iOS 10.0。即使我的应用程序中有 iOS 8.0 作为构建目标,我也可以使用它吗? 支持意味着他们测试了它。您必须自己尝试——如果他们开始使用您没有的方法,您可能需要使用旧版本。您可以将 build 设置为 10,将 deployment 设置为 8——这是受支持的 文档说“正常方式”——如果您不知道,最好在尝试后谷歌或提出新问题 好的,我会的。谢谢你的帮助:)以上是关于UIView 作为轮播的项目的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Vue(Nuxt) 中使用图像作为 Vue 轮播的导航标签?