iCarousel停在用户选择的索引上

时间:2012-05-26 15:37:12

标签: iphone ios xcode

编辑:

我正在创建一个类似老虎机的应用程序,我为插槽对象添加了iCarousel。 所以我有一个旋转iCarousel的按钮。在我的iCarousel视图中有两个插槽(Slot1和Slot2)。以下是我的iCarouselView :(该框是TWO carousel所在的位置)

enter image description here

这是我旋转iCarousel的方式:

-(IBAction) spin {

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

}

以下是我想做的事情:我想强行让它停在用户选择的索引上。

我这样做了,下面的图片是newViewcontroller,其中包含UIImageView,其中有一个按钮,所以当用户点按它时,我的CustomPicker会弹出。我的CustomPicker包含用户在相机胶卷上拾取的图像。因此,每个按钮都有一个特定的值发送到我的iCarouselView。 slot1的carousel1和slot2的carousel2。

所以我的问题是旋转旋转木马,然后在特定的时间内使停止到用户选择的所需图像/索引。

抱歉我的英语不好。 enter image description here

4 个答案:

答案 0 :(得分: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;

 }

你必须做类似的事情。希望它有用:) !!

答案 1 :(得分:0)

如果不扩展UIButton,您可以向按钮添加唯一的TAG,从UIEvent的源中获取标记。

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 ...
 }

有关传递参数的其他信息,请参阅:Passing parameters on button action:@selector

答案 2 :(得分:0)

为什么你不会做你的tableview主意,请参加以下常规电话:

[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]];
}

答案 3 :(得分: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]];

====旧答案====

我同意其他人对目标是什么的困惑。例如,目前尚不清楚“价格”是什么以及它与您的老虎机有什么关系? “我希望用户选择他们的最后价格,这意味着我的icarousel可以停止的最后一个视图或图像”很抱歉,但这与我对“价格”这个词的理解不符。

但最后阅读你的场景:“我想要的是当用户点击UITableViewCell或带有来自阵列的特定图像的缩略图时,它会将某些/值传递给我的UIButton旋转,以便从中点击图像UITableViewCell将是最后的价格。“我将其解释为只有一个值,您的旋转按钮需要访问OR,以及您的旋转按钮需要访问的每个图像的值。这两个看起来都很简单,所以我不确定为什么这个问题。

假设它是第一个(单个价格),那么为什么你不能让你的设置控制器设置一个具有该值的属性(与传递图像NSMutableArray的方式相同)?

如果是第二个(每个图像的值),则创建两个并行数组,一个具有价格,一个具有图像,或者具有包含字典的数组,每个都有价格和图像。< / p>