Iphone UIScrollView-类似UIPickerView的选择

Iphone UIScrollView-类似UIPickerView的选择,iphone,objective-c,ios,xcode,uiscrollview,Iphone,Objective C,Ios,Xcode,Uiscrollview,我的UIScrollView有两个小问题。 我设法创建了滚动视图,它与选择器视图类似,只是它是水平的。 问题n.1是-如何获取用户点击的号码? 问题n.2是-如何使scrollview不断循环-永无止境? 一个问题-是否可以制作一些“选择指示器” 这是我的密码: numberArray=[NSArray阵列,其对象为:@“1”、“2”、“3”、“4”、“5”, @"6", @"7", @"8", @"9", @"10", @"11", @"12", @"13", @"14", @"15", @"


我的UIScrollView有两个小问题。
我设法创建了滚动视图,它与选择器视图类似,只是它是水平的。

问题n.1是-如何获取用户点击的号码?
问题n.2是-如何使scrollview不断循环-永无止境?
一个问题-是否可以制作一些“选择指示器”

这是我的密码:

numberArray=[NSArray阵列,其对象为:@“1”、“2”、“3”、“4”、“5”, @"6", @"7", @"8", @"9", @"10", @"11", @"12", @"13", @"14", @"15", @"16", @"17", @"18", @"19", @"20", @"21", @"22", @"23", @"24", @"25", @"26", @"27", @"28", @"29", @"30", @"31", @"32", @"33", @"34", @"35", @"36", @"37", @"38", @"39", @"40", @"41", @"42", @"43", @"44", @"45", @"46", @"47", @"48", @"49", @"50", @"51", @"52", @"53", @"54", @"55", @"56", @"57", @"58", @"59", @"60", @"61", @"62", @"63", @"64", @"65", @"66", @"67", @"68", @"69", @"70", @"71", @"72", @"73", @"74", @"75", @"76", @"77", @"78", @"79", @"80", @"81", @"82", @"83", @"84", @"85", @"86", @"87", @"88", @"89", @"90", @"91", @"92", @"93", @"94", @"95", @"96,"97,"98,"99,"100,无";

如果有人知道解决这个问题的好办法,我会非常高兴的!!!!:))

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

你的问题太宽了,无法给出详细的答案,但是是的,你所说的每件事都可以很容易地解决

问题n.1是-如何获取用户点击的号码

如果您想知道您的UIScrollView此时选择了什么元素,那么这不是问题:UIScrollView总是知道它的位置(contentOffset),这使您可以轻松地定义选择了哪个对象(您正在使用哪个对象)

如果您想知道用户何时用手指点击“picker view”(UIScrollView)中的一个元素,那么我想说,答案取决于您实际如何表示数据(例如,如果您在屏幕上同时看到scrollView的一个或多个元素)。但在任何情况下,您都可以使用UITapGestureRecognizer轻松解决此问题。Smth类似:

// 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];
然后,要在选择器中以编程方式滚动它,请执行以下操作:

- (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];
    }
}
-(void)handleSingleTap:(UIGestureRecognitor*)GestureRecognitor
{
CGPoint pointOfTouch=[GestureRecognitor locationInView:self.view];
if((触点x>自右箭头最小值)和&(触点x<自右箭头最大值)){
[scrollView setContentOffset:CGPointMake(lastOffset+self.lengthOfLabel,0)动画:是];
}else if((pointOfTouch.x>self.leftArrowMin)和&(pointOfTouch.x
问题n.2是-如何使scrollview不断循环-永无止境

如果您知道计算scrollView元素序列中的下一个/上一个或随机元素的算法,则可以解决此问题。 基本上,我在我的一个项目中为自己解决了同样的问题(appStore中的免费应用程序“IJCAI11”,你可以在datePicker的工作中看到所选会议当天的细节:应用了无限滚动视图的算法,我后来仅从设计角度应用了这些限制)。 我在那里使用的方案很简单,但可能有点奇怪(在阅读之前,请注意,在我的例子中,当scrollView处于非滚动状态时,我在屏幕上只看到scrollView的一个元素):

  • 我用3个标签创建UIScrollView(如果您一次看到超过1个元素,根据您的具体情况,这可能是5、7、…、2N+1)
  • 使第二个(中心)标签处于活动状态
  • 为所有3个(2N+1)标签指定适当的值。在此步骤中,第二个(中心)标签将包含(将显示)默认值的数据
  • 当用户向左/向右滚动一步(到位置M_pos)时,您可以按照标准方式执行,因为您的相邻中心标签包含正确的数据(M)
  • 然后你将这个新的活动值(M)应用于你的中心标签(这将在幕后,因此用户不会在屏幕上看到),然后你正确地重新计算所有其他标签(…,M-1,M,M+1,…),包括你的M_位置(!)
  • 使用“动画:否”模式,您可以将滚动视图移动到中心位置。在这种情况下,当用户的滚动视图从位置M_pos移动到中心位置时,用户什么也看不到。所有相邻的标签都已重新计算,您可以随时重复第4点,让用户感觉到,他使用滚动视图时包含大量元素(而实际上,您只需使用3(2N+1)个标签,每次移动后都会更改其内容)
  • 一个问题——是否可以制作一些“选择指标”

    如果我正确地理解了这个问题,那么只考虑视图/子视图的东西,特别是视图类的函数AddiSiew;p>


    希望这有帮助

    我认为这样创建
    numberArray
    会更好:
    NSMutableArray*numberArray=[[NSMutableArray alloc]init];对于(int i=0;i<100;i++){[numberArray addObject:[NSString stringWithFormat:@“%i”,i]];}
    @fabian789是的,你是对的。。谢谢:)我的意思是,当你滚动到100时,下一个数字将是1,反之亦然。太好了!一切都很好,只是一件小事-你如何实际处理把手上的触摸(点击:?:)其他一切都很好,功能齐全。Tha
    - (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];
        }
    }