2

私はそれが(ページ化されたスクロールビュー)であることiCarouselを知らない人のために、スロットマシンとして使用しています。したがって、私のアプリではスクロールし、停止すると Image(Result) が 3 秒間表示され、ボタンがポップアップ表示されます。ボタンを押すと、View(Image Result) が削除され、再度回転します。iCarouselUIScrollview

カルーセルビューを削除する私の方法は次のとおりです。

    NSInteger CurrentImage = carousel.currentItemIndex;
    [carousel removeItemAtIndex:CurrentImage animated:YES];
    [images removeObjectAtIndex:CurrentImage];

しかし、carousel.numberOfItemsアイテムが1つ残っていると、スクロールせず、そこにスタックします。

そこで、アイテム(インデックス)が1つしか残っていなくてもスクロールできるようにする方法を作りました。

最後のインデックスで挿入したので、これを試しました:

[self.carousel insertItemAtIndex:0 animated:NO];

(しかし、動作しません)

それから私は別のものを試しました:

int lastObject = [images objectAtIndex: ([images count]-1)]
[self.carousel insertItemAtIndex:lastObject animated:NO];

(まだ動かない)

そしてこれも:

int count = [images count];
[images objectAtIndex:count - 1]; 

(まだ運がない)

私は間違っていますか?または他の方法は何ですか?または、最後のビューを複製できますか? 助けてくれてありがとう。

編集: メソッド

     - (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel
    {
        if ([images count] == 1 || [self.carousel numberOfItems] == 1)
            return 2;

        return [images count];
    }

    - (NSUInteger)numberOfVisibleItemsInCarousel:(iCarousel *)carousel
    {
        //limit the number of items views loaded concurrently (for performance reasons)
        return 7;
    }


    - (UIView *)carousel:(iCarousel *)_carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
    {

        if (index >= [images count] || index >= [carousel numberOfItems]) {
            index = 0;
        }

        NSDictionary *obj = [images objectAtIndex:index];
        view = [[UIImageView alloc] initWithImage:[obj objectForKey:@"image"]];
        view.tag = index;

        return view;
    }


    - (NSUInteger)numberOfPlaceholdersInCarousel:(iCarousel *)carousel
    {
        //note: placeholder views are only displayed on some carousels if wrapping is disabled
        return 0;
    }


    - (CGFloat)carouselItemWidth:(iCarousel *)carousel
    {
        //usually this should be slightly wider than the item views
        return 400;
    }

 - (BOOL)carousel:(iCarousel *)carousel shouldSelectItemAtIndex:(NSInteger)index{
    return 5;  
}   
    - (BOOL)carouselShouldWrap:(iCarousel *)carousel
    {
        //wrap all carousels
        return wrap;
    }

削除方法:

-(void) deleteItem{
    //Removes the object chosen 
    if (carousel.numberOfItems >= 1)
    {   
        NSInteger index = carousel.currentItemIndex;
        [carousel removeItemAtIndex:index animated:YES];
        //[images removeObjectAtIndex:index];
        //[images replaceObjectAtIndex:index withObject:[NSNull null]];
    } 

}
4

1 に答える 1

2

あなたにできることは作ることです

- (NSUInteger)numberOfItemsInCarousel:(iCarousel*)carousel;

常に1より大きい値を返します(例:2)。次に、

- (UIView*)carousel:(iCarousel*)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView*)view;

から返す要素の最小数に対して常に正しいビューを返しますnumberOfItemsInCarousel

例えば。

- (NSUInteger)numberOfItemsInCarousel:(iCarousel*)carousel {
   if (numberOfViews == 1)
      return 2;
   return numberOfViews;
}


- (UIView*)carousel:(iCarousel*)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView*)view {

  if (index >= numberOfViews) {
      index = 0;
  }

  NSDictionary *obj = [images objectAtIndex:index];
  view = [[UIImageView alloc] initWithImage:[obj objectForKey:@"image"]];
  view.tag = index;
  return view;
}

また、要素が残っていない場合を管理するために、上記のコードにいくつかのガードを追加して、最後の要素が削除されないようにする必要があります。

于 2012-07-05T09:03:31.217 に答える