誰でも私を助けることができます.例でデフォルトのiCarouselアイテムの中心位置を削除する方法は?
1 に答える
私は同じ問題を抱えていて、次のハックでそれを行います;)
問題: 常に左揃えの 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;
}