且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

NSMutableArray难度

更新时间:2022-10-14 19:50:07


有没有办法让我的数组或我的iCarousel.view在我删除时不调整它们的索引。仍然以正确的方式保留我的索引。或者是否有其他解决方案,如调整我的数组,就像调整我的PhotoViewController选择索引一样。因为我认为当我的数组保留索引甚至删除时我就能解决这个问题。但仍然不能。


修改iCarousel管理索引的方式的唯一方法是修改代码。实际上,如果你查看iCarousel.m中的 removeViewAtIndex 方法,你会看到索引是通过NSDictionary管理的,并且在删除时,字典被重新排列(物品重新订购)。您可以使用该方法:

   - (void)removeViewAtIndex:(NSInteger)index 
{
NSMutableDictionary * newItemViews = [NSMutableDictionary dictionaryWithCapacity:[itemViews count] - 1];
for(NSNumber * [self indicesForVisibleItems]中的数字)
{
NSInteger i = [number integerValue];
if(i< index)
{
[newItemViews setObject:[itemViews objectForKey:number] forKey:number];
}
else if(i> index)
{
[newItemViews setObject:[itemViews objectForKey:number] forKey:[NSNumber numberWithInteger:i - 1]];
}
}
self.itemViews = newItemViews;
}

您可以将相同的逻辑应用于您的阵列,以便旋转木马和您的数组保持同步。当然,如果您将索引存储在某处(slot1 / slot2 / slot2 / slot4?),您还应该在删除元素后更新它们的值。



另一方面,我认为你在这里问的是如何做一些你认为能解决问题的事情,但你并没有真正解释问题所在。事实上,如果我理解正确,你所做的是:


  1. 旋转旋转木马;


  2. 当轮播停止时,如果在所需项目上没有偶然的机会,则强制它滚动到该项目。


删除一些元素之后没有理由不这样做(除非iCarousel有一些错误,然后解决方案就是捕获bug)。唯一的部分是知道哪个索引是你想要转移的索引。



作为一个建议,我首先要简化你的委托 carouselDidEndScrollingAnimation 方法。实际上,你的 carouselDidEndScrollingAnimation 有一个名为 carousel 的参数,好吧,我认为这是你应该引用的唯一轮播以那种方法。如果您没有看到,这就是原因:您的每个轮播将停止滚动,并且将调用 carouselDidEndScrollingAnimation ;这样方法将被调用两次。每次执行该方法时,您将修改carousel1和carousel2的状态(通过调用 scrollToItemAtIndex );因此,在每个旋转木马上,你会拨打 scrollToItemAtIndex 两次。