以编程方式滚动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];