以编程方式滚动UIScrollView

我有一个UIScrollView有几个视图。 当用户轻弹手指时,视图会根据手指轻弹的方向向右或向左滚动。 基本上我的代码工作方式类似于iPhone的照片应用程序。 现在,有没有一种方法可以通过编程的方式做同样的事情,以便我最终得到一个单独运行的幻灯片,并在每个滚动之间点击一个button和一个可configuration的暂停?

你怎么用UIScrollView做幻灯片?

您可以使用Objective-C中的以下语句之一滚动到滚动视图中的某个点

 [scrollView scrollRectToVisible:CGRectMake(x, y, 1, 1) animated:YES]; // or [scrollView setContentOffset:CGPointMake(x, y) animated:YES]; 

或Swift

 scrollView.scrollRectToVisible(CGRect(x: x, y: y, width: 1, height: 1), animated: true) // or scrollView.setContentOffset(CGPoint(x: x, y: y), animated: true) 

请参阅Apple的“ 滚动滚动视图内容 ”指南 。

要使用UIScrollView进行幻灯片显示,请将所有图像排列在滚动视图中,设置重复定时器,然后在定时器激活时设置-setContentOffset:animated:

但更有效的方法是使用2个图像视图,并使用转换交换它们,或在定时器触发时简单地切换位置。 有关详细信息,请参阅iPhone图像幻灯片 。

如果你想控制animation的持续时间和风格,你可以做:

 [UIView animateWithDuration:2.0f delay:0 options:UIViewAnimationOptionCurveLinear animations:^{ scrollView.contentOffset = CGPointMake(x, y); } completion:NULL]; 

调整持续时间( 2.0f )和选项( UIViewAnimationOptionCurveLinear )来品尝!

另一种方法是

 scrollView.contentOffset = CGPointMake(x,y); 

在Swift中使用animation

 scrollView.setContentOffset(CGPointMake(x, y), animated: true) 

Swift 3

  let point = CGPoint(x: 0, y: 200) // 200 or any value you like. scrollView.contentOffset = point 
 - (void)viewDidLoad { [super viewDidLoad]; board=[[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.height, 80)]; board.backgroundColor=[UIColor greenColor]; [self.view addSubview:board]; // Do any additional setup after loading the view. } -(void)viewDidLayoutSubviews { NSString *str=@"ABCDEFGHIJKLMNOPQRSTUVWXYZ"; index=1; for (int i=0; i<20; i++) { UILabel *lbl=[[UILabel alloc]initWithFrame:CGRectMake(-50, 15, 50, 50)]; lbl.tag=i+1; lbl.text=[NSString stringWithFormat:@"%c",[str characterAtIndex:arc4random()%str.length]]; lbl.textColor=[UIColor darkGrayColor]; lbl.textAlignment=NSTextAlignmentCenter; lbl.font=[UIFont systemFontOfSize:40]; lbl.layer.borderWidth=1; lbl.layer.borderColor=[UIColor blackColor].CGColor; [board addSubview:lbl]; } [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(CallAnimation) userInfo:nil repeats:YES]; NSLog(@"%d",[board subviews].count); } -(void)CallAnimation { if (index>20) { index=1; } UIView *aView=[board viewWithTag:index]; [self doAnimation:aView]; index++; NSLog(@"%d",index); } -(void)doAnimation:(UIView*)aView { [UIView animateWithDuration:10 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{ aView.frame=CGRectMake(self.view.frame.size.height, 15, 50, 50); } completion:^(BOOL isDone) { if (isDone) { //do Somthing aView.frame=CGRectMake(-50, 15, 50, 50); } }]; } 
 scrollView.setContentOffset(CGPoint(x: y, y: x), animated: true) 
 [Scrollview setContentOffset:CGPointMake(x, y) animated:YES];