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 中执行此操作) 实现数据源方法numberOfItemsInCarouselviewForItemAtIndex...

已编辑的问题回复:

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

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

【讨论】:

感谢您的回答。对于第二个问题,我的意思是 iCarousel 支持的构建目标是 iOS 10.0。即使我的应用程序中有 iOS 8.0 作为构建目标,我也可以使用它吗? 支持意味着他们测试了它。您必须自己尝试——如果他们开始使用您没有的方法,您可能需要使用旧版本。您可以将 build 设置为 10,将 deployment 设置为 8——这是受支持的 文档说“正常方式”——如果您不知道,最好在尝试后谷歌或提出新问题 好的,我会的。谢谢你的帮助:)

以上是关于UIView 作为轮播的项目的主要内容,如果未能解决你的问题,请参考以下文章

向上轮播的公告信息显示

如何在 Vue(Nuxt) 中使用图像作为 Vue 轮播的导航标签?

Xcode 5.0.2 中的 iCarousel,一个视图控制器中的多个轮播没有获取轮播的实例

多项目响应轮播

更改轮播项目更改的背景颜色

会声会影如何制作图片轮播的视频效果