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
,所以当用户点击它时,我的CustomPicker
popup。 我的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两个平行数组,一个使用价格,另一个使用图像,或者使用包含字典的数组,每个数组都有一个价格和一个图像。