UIScrollView – select像UIPickerView

我有我的UIScrollView两个小问题。
我设法创build了滚动视图,除了横向外,它与拾取器视图相似。

问题n.1是 – 如何获得用户点击的号码?
问题n.2是 – 我如何使scrollview转动 – 永无止境?
一个问题 – 是否有可能做出一些“select指标”?

这是我的代码:

numberArray = [NSArray arrayWithObjects:@“1”,@“2”,@“3”,@“4”,@“5”,@“6”,@“7”,@“8”,@“9” “十一”,“十二”,“十三”,“十四”,“十”,“十” ,“”,“”,“”,“”,“”,“”,“”,“”,“”,“ 30“,31”,@“32”,@“33”,@“34”,@“35”,@“36”,@“37”,@“38”,@“39” “40”,“41”,“42”,“43”,“44”,“45”,“46”,“47”,“48” “51”,@“52”,@“53”,@“54”,@“55”,@“56”,@“57”,@“58”,@“59” “61”,@“62”,@“63”,@“64”,@“65”,@“66”,@“67”,@“68”,@“69” “70”,“71”,“72”,“73”,“74”,“75”,“76”,“77”,“78” @“81”,@“82”,@“83”,@“84”,@“85”,@“86”,@“87”,@“88”,@“89” “90”,“91”,“92”,“93”,“94”,“95”,“96”,“97”,“98”,“99” ,@“100”,nil];

masterDividerView = [[UIView alloc] initWithFrame:CGRectMake(0, 480, 320, 44)]; morePeople = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 53)]; morePeople.backgroundColor = [UIColor scrollViewTexturedBackgroundColor]; morePeople.delegate = self; [morePeople setBackgroundColor:[UIColor whiteColor]]; [morePeople setCanCancelContentTouches:NO]; morePeople.showsHorizontalScrollIndicator = NO; morePeople.showsVerticalScrollIndicator = NO; morePeople.clipsToBounds = NO; morePeople.scrollEnabled = YES; morePeople.pagingEnabled = NO; NSUInteger nimages = 0; NSInteger tot=0; CGFloat cx = 0; for (; ; nimages++) { NSString *label = [numberArray objectAtIndex:nimages]; if (tot==99) { break; } if (99==nimages) { nimages=0; } UILabel *labelView = [[UILabel alloc] init]; labelView.text = label; labelView.lineBreakMode = UILineBreakModeWordWrap; labelView.numberOfLines = 0; [labelView sizeToFit]; labelView.backgroundColor = [UIColor scrollViewTexturedBackgroundColor]; CGRect rect = labelView.frame; rect.size.height = 53; rect.size.width = 40; rect.origin.x = cx; rect.origin.y = 0; labelView.frame = rect; [morePeople addSubview:labelView]; cx += labelView.frame.size.width+5; tot++; } self.pageControl.numberOfPages = nimages; [morePeople setContentSize:CGSizeMake(cx, [morePeople bounds].size.height)]; [masterDividerView addSubview:morePeople]; [self.view addSubview:masterDividerView]; 

如果有人知道这个很好的解决scheme,我会非常高兴! :))

你的问题太广泛了,不能做出详细的答案,但是,是的,你所谈论的一切都可以用相当简单的方式解决。

问题n.1是 – 如何获得用户点击的号码?

如果你想知道你的UIScrollView目前select了什么元素,那么这不是一个问题:UIScrollView总是知道它的位置(contentOffset),这使得你可以很容易地定义,select哪个对象(你是哪个对象现在工作)。

如果你的意思是知道用户什么时候用手指点击你的“picker view”(UIScrollView)的元素,那么我会说这个答案取决于你如何实际地表示你的数据(就像你看到一个在您的屏幕上一次滚动视图的几个元素)。 但是在任何情况下,您都可以使用UITapGestureRecognizer轻松解决此问题。 如下所示:

 // add gesture recognizers to the scroll view UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; [singleTap setNumberOfTapsRequired:1]; [self.yourScrollView addGestureRecognizer:singleTap]; [singleTap release]; 

然后在你的select器中以编程方式滚动它,你会这样做:

 - (void)handleSingleTap:(UIGestureRecognizer *)gestureRecognizer { CGPoint pointOfTouch = [gestureRecognizer locationInView:self.view]; if ( (pointOfTouch.x > self.rightArrowMin) && (pointOfTouch.x < self.rightArrowMax) ) { [scrollView setContentOffset:CGPointMake(lastOffset + self.lengthOfLabel, 0) animated:YES]; } else if ( (pointOfTouch.x > self.leftArrowMin) && (pointOfTouch.x < self.leftArrowMax) ) { [scrollView setContentOffset:CGPointMake(lastOffset - self.lengthOfLabel, 0) animated:YES]; } } 

问题n.2是 – 我如何使scrollview转动 – 永无止境?

如果您知道计算scrollView元素序列中next / previous或random元素的algorithm,则可以解决此问题。 基本上,我在我的一个项目(appStore中的免费应用程序“IJCAI11”)中为自己解决了这个问题,在任何选定的会议date的细节中,您可以在dateselect器的工作中看到:应用了无限的algorithm滚动视图,这是我以后只从deviseangular度应用的限制)。 我在这里使用的scheme很简单,虽然也许有点奇怪(在阅读前面,请注意,在我的情况下,当scrollView处于非滚动状态时,屏幕上只能看到一个scrollView元素):

  1. 我用3创build了UIScrollView(如果你一次看到超过1个元素,根据你的情况,这可能就像5,7,…,2N + 1);
  2. 使第二个(中央)标签处于活动状态。
  3. 为所有3(2N + 1)个标签分配适当的值。 在这一步你的第二个(中央)标签将包含数据(将显示)的默认值。
  4. 当用户向左/向右滚动一次(到位置M_pos)时,以标准方式执行,因为与中央标签相邻的标签包含正确的数据(M)。
  5. 然后,您将这个新的活动值(M)应用于您的中央标签(这将在幕后,因此用户不会在屏幕上看到),然后重新计算所有其他标签(…, M-1,M,M + 1,…),包括你的M_pos位置(!)。
  6. 使用“animation:否”模式,您可以将scrollView移动到您的中心位置。 在这种情况下,用户看不到任何东西,实际上他的scrollView从位置M_pos移动到中心位置。 所有相邻的标签已经被重新计算,你可以重复任意次数的点4,给用户一个强烈的感觉,他使用了大量元素的scrollView(而在实践中,你只是用3 (2N + 1)标签,每次移动后都会改变内容)。

一个问题 – 是否有可能做出一些“select指标”?

如果我正确地理解了这个问题,那就考虑一下View / Subview的东西,特别是View类的addSubview函数;)

希望这可以帮助!

我不确定我是否理解了你的问题,但是你是否已经想过使用NSTimer以一定的速度或在一定的时间内重复事件? (指着你的“圆的东西”)