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 更改 buttonTapped 上的视图控制器?