1

誰でも私を助けることができます.例でデフォルトのiCarouselアイテムの中心位置を削除する方法は?

4

1 に答える 1

0

私は同じ問題を抱えていて、次のハックでそれを行います;)

問題: 常に左揃えの 3 つの項目のみを表示するビューが必要です。

解決策: 私が行ったことは、常に少なくとも 3 つのアイテムを作成することです。0、1、または 2 つの項目がある場合、常に 3 つ作成しますが、表示する必要のない項目は空の UIView として作成します。私は常に 2 つのプレースホルダーを持っていますが、場合によっては一方または両方が空です。

たとえば、表示する項目が 2 つある場合、実際には 3 つ作成していますが、3 つ目は空の UIView です。2 つのプレースホルダーと 1 つのアイテムを作成しています。

  • 最初のアイテムは、インデックス 0の最初のプレースホルダーです
  • 2 番目のアイテムはアイテムです
  • 3 番目の項目は 2 番目のプレースホルダーですが、UIView は空です

表示するアイテムが 1 つある場合、ここでも 3 つ作成しますが、2 つ目と 3 つ目は空の UIView です。前の例と同じように、2 つのプレースホルダーと 1 つのアイテムを作成しています。

  • 最初のアイテムは、インデックス 0の最初のプレースホルダーです
  • 2 番目の項目はItemですが、UIView は空です
  • 3 番目の項目は 2 番目のプレースホルダーですが、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 に答える