1

iCarouselを使用してメニューを作成しようとしている初心者です。これまでに試したことは、カルーセルの各ビューのカスタム イメージを含む UIButton を返すことです。画像リストは、例で述べたのと同じように宣言されています。私が直面している問題は次のとおりです。

  1. ボタン (カルーセルで返されるビュー) - 図に示すように、画像が適切に調整されていません。

  2. また、クマを表示しているときは、タイガーのピッキングの説明であることがわかります。

  3. 写真をタップすると、ボタンのタッチダウンイベントに反応するのではなく、前方にスクロールします。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {

    //set up carousel data
    wrap = YES;

    self.menuItems = [NSMutableArray arrayWithObjects:@"Bear.png",
                    @"Zebra.png",
                    @"Tiger.png",
                    @"Goat.png",
                    @"Birds.png",
                    @"Giraffe.png",
                    nil];

    self.descriptions = [NSMutableArray arrayWithObjects:@"Bears Eat: Honey",
                         @"Zebras Eat: Grass",
                         @"Tigers Eat: Meat",
                         @"Goats Eat: Weeds",
                         @"Birds Eat: Seeds",
                         @"Giraffes Eat: Trees",
                         nil];
}

return self;
}

- (void)buttonTapped:(UIButton *)sender
{
NSInteger index = [aCarousel indexOfItemViewOrSubview:sender];

switch (index) {
    case 0:
    NSLog(@"at index: %d",index);
        break;

    case 1:
    NSLog(@"at index: %d",index);
      break;   

    case 2:
        NSLog(@"at index: %d",index);
        break;  
    case 3:
        NSLog(@"at index: %d",index);
        break;  
    case 4:
        NSLog(@"at index: %d",index);
        break; 
    case 5:
        NSLog(@"at index: %d",index);
        break;  
    }  }

- (void)viewDidLoad
{
aCarousel.type = iCarouselTypeInvertedRotary;
aCarousel.delegate = self;
aCarousel.dataSource = self;
//aCarousel.frame = CGRectMake(0, 68, 320, 257);

[super viewDidLoad];
}


#pragma - mark iCarousel Delegate

- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel 
{
    return [self.menuItems count];
}

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

- (UIView*)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.bounds = CGRectMake(0, 0, 240.0f, 200.0f);

    [button setImage:[UIImage imageNamed:[menuItems objectAtIndex:index]] forState:UIControlStateNormal];    
    [button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchDown];
    button.imageView.contentMode = UIViewContentModeScaleAspectFit;
    button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill;
    //button.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;  

     return button;
}

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

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

- (BOOL)carouselShouldWrap:(iCarousel *)carousel
{
    return self.wrap;
}

- (void)carouselDidScroll:(iCarousel *)carousel
{
    [label setText:[NSString stringWithFormat:@"%@", [descriptions objectAtIndex:carousel.currentItemIndex]]];
}

カルーセルを何時間も調整しようとするのは本当にうんざりです。私はアスペクトフィレシオを試しましたが、フレームを調整しましたが、出力が間違っている理由がわかりません。誰かが私がどこで間違っているのか理解してもらえますか? どうもありがとう :(

4

1 に答える 1

0

最後に、私は自分で問題を解決することができました。なぜ私のプロジェクトが奇妙な動作をしていたのか分からないので、新しいプロジェクトで iCarousel を使用することにしました。私が指摘した間違いは次のとおりです。

  1. nibファイルで、サブビューのクラスタイプをiCarouselに作成していたときに、オブジェクトリストに「I Carousel」のようなものが表示されていました-リストの名前を手動でIBOutlet iCarouselオブジェクトに「aCarousel」に変更しました。

  2. -(UIView*)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view第二に、メソッドで UIButton を UIView に適切に割り当てていませんでした。Examples フォルダに"Button demo"が見つかってよかったです。そこからコードをコピーしたところ、すべてがうまく機能しています。:)

見たい人のためにここにコードをコピーしてください:

- (UIView*)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
    UIButton *button = (UIButton *)view;
    if (button == nil)
    {
        //no button available to recycle, so create new one
        UIImage *image = [UIImage imageNamed:[menuItems objectAtIndex:index]];
        button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(0.0f, 0.0f, image.size.width, image.size.height);
        //[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [button setBackgroundImage:image forState:UIControlStateNormal];
        //button.titleLabel.font = [button.titleLabel.font fontWithSize:50];
        [button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchDown];
    }

    //set button label
    //[button setTitle:[NSString stringWithFormat:@"%i", index] forState:UIControlStateNormal];
    //Use these commented lines if you are displaying some text on button
    return button;
}
于 2012-11-18T18:41:35.747 に答える