iCarousel停在用户挑选的索引处

编辑:

我正在制作一个像老虎机这样的应用程序,我为槽对象添加了iCarousel 。 所以我有一个旋转iCarousel的button。 在我的iCarousel视图中有两个插槽(Slot1和Slot2)。 下面是我的iCarouselView :(这个盒子是两个carousel的地方)

在这里输入图像说明

这是我如何旋转我的iCarousel

 -(IBAction) spin { [carousel1 scrollByNumberOfItems:-35 duration:10.7550f]; [carousel2 scrollByNumberOfItems:-35 duration:10.7550f]; } 

这是我想要做的: 我想强制停止到用户select的索引。

我已经这样做了,下面的图像是一个newViewcontroller ,其中包含一个button的UIImageView ,所以当用户点击它时,我的CustomPickerpopup。 我的CustomPicker包含用户在相机胶卷上选取的图像。 所以每个button都有一个特定的值发送到我的iCarouselView 。 slot1的carousel1和slot2的carousel2。

所以我的问题是旋转传送带,然后在特定的时间使其停止到所需的图像/索引用户select。

对不起,我的英语不好。 在这里输入图像说明

这很容易。 我以前做过类似的事情。

在下面的方法中:

 - (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; } 

你必须做类似的事情。 希望这是有帮助:)!

如果不扩展UIButton,你可以添加一个独特的TAG到button,从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 ... } 

有关传递参数的更多信息,请参阅: 在button操作上传递参数:@selector

为什么不做你的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]]; } 

好的,让我试着重新解释这个问题:你有一个图像数组“imageArray”与一个特殊的“carousel1Image”(由newViewControllerselect)。 你想要旋转木马四处转转,​​然后降落在特殊的地方?

如果这是正确的,这样的事情应该工作…

 -(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]]; 

====旧的答案====

我分享他人对目标的困惑。 例如,目前还不清楚“价格”是什么,以及它与您的老虎机有什么关系? “我想要用户select他们的最后一个价格,这意味着最后一个视图或图像我的货车可以停止”对不起,但这不符合我对“价格”一词的理解。

但最后读到你的场景:“我想要的是,当用户点击一个UITableViewCell或缩略图与数组中的特定图像,它会传​​递一些东西/值到我的UIButton旋转,所以图像点击从UITableViewCell将最后的价格“。 我把它解释为只有一个值,你的旋转button需要有权访问或者你的旋转button需要访问每个图片的值。 两者似乎都很简单,所以我不清楚为什么这个问题。

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

如果是第二个(每个图像的值),则创build两个平行数组,一个使用价格,另一个使用图像,或者使用包含字典的数组,每个数组都有一个价格和一个图像。