编辑:
我正在创建一个类似老虎机的应用程序,我为插槽对象添加了iCarousel
。
所以我有一个旋转iCarousel
的按钮。在我的iCarousel视图中有两个插槽(Slot1和Slot2)。以下是我的iCarouselView
:(该框是TWO carousel
所在的位置)
这是我旋转iCarousel
的方式:
-(IBAction) spin {
[carousel1 scrollByNumberOfItems:-35 duration:10.7550f];
[carousel2 scrollByNumberOfItems:-35 duration:10.7550f];
}
以下是我想做的事情:我想强行让它停在用户选择的索引上。
我这样做了,下面的图片是newViewcontroller
,其中包含UIImageView
,其中有一个按钮,所以当用户点按它时,我的CustomPicker
会弹出。我的CustomPicker
包含用户在相机胶卷上拾取的图像。因此,每个按钮都有一个特定的值发送到我的iCarouselView
。 slot1的carousel1和slot2的carousel2。
所以我的问题是旋转旋转木马,然后在特定的时间内使停止到用户选择的所需图像/索引。
抱歉我的英语不好。
答案 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>