iCarousel 上的 carouselCurrentItemIndexDidChange 仅在我滑动时被调用

Posted

技术标签:

【中文标题】iCarousel 上的 carouselCurrentItemIndexDidChange 仅在我滑动时被调用【英文标题】:carouselCurrentItemIndexDidChange on iCarousel only being called when I swipe 【发布时间】:2016-08-10 03:09:44 【问题描述】:

我在我的 Swift+Sprite Kit 游戏中使用 iCarousel,其中用户已解锁和锁定项目。

被锁定的物品会显示一些信息,比如当前用户的硬币,以及一些写着“解锁这个:X数量的硬币”的文字,如果轮播物品没有被锁定,它不会显示任何这些信息,只是一个显示“选择”的按钮。

现在,我得到了它的工作,但它只会在我开始滑动项目时工作,而不是轮播第一次出现时。

为了完成这项工作,我在 carouselCurrentItemIndexDidChange() 方法中执行此操作。当我滑动时,这显然会改变。

如何在开始时设置当前轮播索引,以便我可以强制显示或不显示信息,具体取决于项目是锁定还是解锁,而不仅仅是在我开始滑动时?

要添加有关此的更多信息,假设用户选择了索引 4 处的项目,我将该索引保存在本地。因此,如果用户关闭并打开游戏,轮播应该从 4 而不是 0 开始。

提前致谢。

【问题讨论】:

你应该在viewForItemAtIndex中设置它,而不是你正在使用的委托方法 哪一个??? this func carousel(carousel: iCarousel, viewForItemAtIndex index: Int, reusingView view: UIView?) -> UIView ?但这不仅在您创建轮播时被调用,而且再也不会被调用? 不,每次需要显示视图时都会调用该方法。它像cellForRowAtIndexPath 一样工作;当视图滚动屏幕时,它们将被丢弃并在返回到屏幕时从此方法中检索。如果影响视图的基础数据发生更改,您可以调用reloadItemAtIndex,然后轮播视图将调用viewForItemAtIndex 以获取更新的视图。 我昨天检查了我是否有一个名为 viewForItemAtIndex 的方法,但我在 iCarousel 中找不到它。有可能吗? 当我说viewForItemAtIndex 时,我只是在节省打字时间。全称就是你说的方法,viewForItemAtIndex: reusingView:。从第 4 项开始,您可以调用 scrollToItemAtIndex:animated: 可能类似于 viewWillAppear 【参考方案1】:

您应该在viewForItemAtIndex: reusingView: 中设置轮播视图。此方法返回的视图应代表该轮播项目的当前状态;如此锁定或酌情“选择”。

如果项目的状态发生变化,那么您可以调用 reloadItemAtIndex: 让 iCarousel 通过调用 viewForItemAtIndex: reusingView: 请求该项目的更新视图。

您可以通过调用scrollToItemAtIndex:animated:将轮播滚动到特定项目

【讨论】:

以上是关于iCarousel 上的 carouselCurrentItemIndexDidChange 仅在我滑动时被调用的主要内容,如果未能解决你的问题,请参考以下文章

iCarousel 不从 iPhone 6+ 上的 4 个项目呈现第三个视图

iCarousel 上的 carouselCurrentItemIndexDidChange 仅在我滑动时被调用

iCarousel 上的缩放变换显示屏幕外的区域

如何使用 iCarousel 更改 buttonTapped 上的视图控制器?

iCarousel 类不适用于 xcode 4.2 和 mac os 10.6 上的 ARC

iCarousel 未显示且未处理方法