1

任何人都可以帮助我,如何通过示例删除默认的 iCarousel 项目居中位置?

4

1 回答 1

0

我遇到了同样的问题,并通过以下 hack 来解决;)

问题: 我需要只显示 3 个始终左对齐的项目的视图。

解决方案: 我所做的是始终至少制作 3 个项目。如果我有 0、1 或 2 个项目,我总是创建 3 个,但那些不需要显示的项目我将创建为空 UIView。我总是有 2 个占位符,但在某些情况下,一个或两个都是空的。

例如,如果我们要显示 2 个项目,我实际上创建了三个,但第三个是空的 UIView。我正在创建两个占位符和一个项目。

  • 第一项是索引 0 处的第一个占位符
  • 第二项是项目
  • 第三项是第二个占位符,但 UIView 为空

如果我们要显示 1 个项目,我再次创建三个,但第二个和第三个是空的 UIView。与前面的示例相同,我正在创建两个占位符和一个项目。

  • 第一项是索引 0 处的第一个占位符
  • 第二项是Item但 UIView 为空
  • 第三项是第二个占位符,但 UIView 为空

由于这种逻辑,我在重用时总是清理视图([v removeFromSuperview]),以确保它是干净的,如果需要显示新视图,我正在添加它([view addSubview ...)。项目占位符的相同逻辑

如果您需要显示 3 个以上的项目,您可以使用相同的逻辑,但将值 3 更改为其他值。如果我错了更新我;)

这是我的代码的一部分,对我有用;)

- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel
{
    return [[self getRecordings] count] > 3? [[self getRecordings] count] - 2: 1;
}

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
    if (view == nil)
    {
        view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 30)];
    }
    else
    {
        // If reusing remove content from holder view for fake items
        for (UIView *v in view.subviews)
        {
            [v removeFromSuperview];
        }
    }

    if ([[self getRecordings] count] >= 2)
    {
        [view addSubview:[(RecordingItemViewController*)[_recordingItemViewControllers objectAtIndex:index + 1] view]];
    }

    return view;
}

- (NSUInteger)numberOfPlaceholdersInCarousel:(iCarousel *)carousel
{
    return 2;
}

- (UIView *)carousel:(iCarousel *)carousel placeholderViewAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
    if (view == nil)
    {
        view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 30)];
    }
    else
    {
    // If reusing remove content from holder view for fake items
        for (UIView *v in view.subviews)
        {
            [v removeFromSuperview];
        }
    }

    if (([[self getRecordings] count] > 0 && [[self getRecordings] count] < 3 && index == 0) || [[self getRecordings]count] >= 3)
    {
        [view addSubview:[(RecordingItemViewController*)(index == 0? [_recordingItemViewControllers objectAtIndex:0]: [_recordingItemViewControllers lastObject]) view]];
    }

    return view;
}
于 2013-05-22T12:35:33.760 回答