10

編集 :

スロットマシンのようなアプリを作っていiCarouselます。スロットオブジェクト用に追加しました。だから私はを回転させるボタンがありますiCarousel。私のiCarouselビューには、2つのスロット(Slot1とSlot2)があります。以下は私のiCarouselViewです:(ボックスはTWOcarouselがある場所です)

ここに画像の説明を入力してください

これは私が私のスピンする方法ですiCarousel

-(IBAction) spin {

[carousel1 scrollByNumberOfItems:-35 duration:10.7550f];
[carousel2 scrollByNumberOfItems:-35 duration:10.7550f];

}

これが私がやりたいことです:ユーザーが選択したインデックスに強制的に停止させたいです。

私はこのようにそれを行いました、下の画像はnewViewcontrollerその中にボタンが含まれてUIImageViewいるので、ユーザーがそれをタップすると、私のCustomPickerポップアップが表示されます。MyCustomPickerには、ユーザーがカメラロールで選択したものの画像が含まれています。したがって、各ボタンには特定の値が送信されます iCarouselView。slot1の場合はcarousel1、slot2の場合はcarousel2。

したがって、私の問題は、カルーセルを回転させてから、特定の時間、ユーザーが選択した目的の画像/インデックスに停止させることです。

英語が下手でごめんなさい。 ここに画像の説明を入力してください

4

4 に答える 4

4

それは簡単です。私は以前に似たようなことをしました。

以下の次の方法で:

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

   //Configure your view here
   ..... 

  //Add a button on each view of the carousel
  UIButton * someButton = [[UIButton alloc] initWithFrame:view.bounds];
     [someButton setAlpha:0.0];
     [someButton addTarget:self action:@selector(fingerLanded:) forControlEvents:UIControlEventTouchDown];
     [view addSubview:someButton];
     [view bringSubviewToFront:someButton];

    //Add a tag - correspond it to the index
     someButton.tag = index;

   //Make sure the view is user interaction enabled
   [view setUserInteractionEnabled:YES];

    //Also make sure the button can actually receive touches and there is no view 
    //blocking touch events from being sent to the button.

  return view;
}

また、追加します

- (void) fingerLanded:(id) sender{

UIButton * theButtonFingerLandedOn = (UIButton *) sender;

//This is the index the user tapped his finger on
NSUInteger index = theButtonFingerLandedOn.tag;

//Scroll to that particular index
[self.carousel scrollToItemAtIndex:index animated:YES];

}

また、追加します

- (void) viewDidLoad{

  //You may need this to enable user interaction on a view flying by    
  // Look in the - (void)transformItemViews method of the iCarousel library
  self.carousel.centerItemWhenSelected = NO;

 }

あなたは似たようなことをしなければなりません。お役に立てば幸いです:)!!

于 2012-06-06T15:45:44.257 に答える
0

さて、質問を言い換えてみましょう。画像の配列「imageArray」と特別な画像「carousel1Image」(newViewControllerによって選択されたもの)があります。カルーセルをN秒間ぐるぐる回してから、特別なカルーセルに着陸させたいですか?

それが正しければ、このようなものが機能するはずです...

-(void) spinCarousel: (iCarousel *) carousel toIndex:(NSInteger) targetIndex { 
    NSInteger imagesPerSecond = 5;
    double secondsToScroll = 10.7550f;

    NSUInteger currIndex = [carousel currentItemIndex];
    NSUInteger numItems = [carousel numberOfItems] + [carousel numberOfPlaceholders];
    NSUInteger timesAround = floor(secondsToScroll*imagesPerSecond/numItems);
    NSInteger numToScroll = timesAround*numItems + targetIndex-currIndex;
    [carousel scrollByNumberOfItems:numToScroll duration: secondsToScroll];

}

[self spinCarousel: carousel1 toIndex:[imageArray indexOfItem:carousel1Image]];
[self spinCarousel: carousel2 toIndex:[imageArray indexOfItem:carousel2Image]];

====古い答え====

私は目標が何であるかについて他の人の混乱を共有します。たとえば、「価格」とは何か、そしてそれがスロットマシンと何の関係があるのか​​は明確ではありませんか?「ユーザーに最後の価格を選択してもらいたいのですが、それは私のイカロウセルが止まるところまでの最後のビューまたは画像を意味します」申し訳ありませんが、それは「価格」という言葉の私の理解と一致しません。

しかし、最後にシナリオを読んでください。「ユーザーが配列からの特定の画像を含むUITableViewCellまたはサムネイルをクリックすると、UIButtonスピンに何か/値が渡されるため、UITableViewCellからの画像クリックは次のようになります。最後の価格。」スピンボタンがアクセスする必要のある単一の値があるか、スピンボタンがアクセスする必要のある各画像の値があると解釈します。どちらも単純に見えるので、なぜ質問なのかわかりません。

それが最初の(単一の価格)と仮定すると、設定コントローラーにその値でプロパティを設定させることができないのはなぜですか(画像のNSMutableArrayを渡す方法と同じです)。

2番目(各画像の値)の場合は、価格と画像を含む2つの並列配列を作成するか、価格と画像を含む辞書を含む配列を作成します。

于 2012-06-05T16:08:58.927 に答える
0

UIButtonを拡張せずに、UIEventのソースからタグを取得して、ボタンに一意のTAGを追加できます。

IE:

-(void) buttonSetupMethod {
    for(each item) {
        UIButton * button = [[UIButton alloc] init];
        ... additional setup ...
        button.tag = SOME_UNIQUE_TAG_FOR_BUTTON;
        [button addTarget:self action:@selector(processaction:) forControlEvents:desiredEvents];
        ... retain button ...
     [button release];
    }
 }

 -(void) processAction:(id) source
 {
     UIButton * button = (UIButton *) source;
     int tag = button.tag;
     ... conditional logic on specific tag ...
 }

パラメータの受け渡しの詳細については、「ボタンアクションでのパラメータの受け渡し:@selector 」を参照してください。

于 2012-05-31T14:50:21.357 に答える
0

なぜあなたはあなたのテーブルビューのアイデアをしないのですか、以下のルーチンの呼び出しを受けてください:

[carousel scrollByNumberOfItems:-35 duration:10.7550f];

それを別の非アクションルーチンに入れ、TableView didSelectItemAtIndexメソッドに新しいルーチンを呼び出させ、アクションルーチンにそれを呼び出させます。

-(void)newRoutineToCall:(int)itemsToMove{
    [carousel scrollByNumberOfItems:itemsToMove duration:10.7550f];
}

-(IBAction) spin {        
    [self newRoutineToCall:-35];
} 

次に実装

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [self newRoutineToCall:[indexPath row]];
}
于 2012-06-01T17:27:49.720 に答える