如何使用Objective C以2秒的时间间隔逐个自动滚动图像?
问题描述:
我已经为少数图像集合进行了滚动视图,我希望它能够以2秒的间隔逐一自动滚动图像。通过下面的代码,我可以使所有图像一次滑动,但我希望一个图像滚动,然后相对于时间滚动。如何使用Objective C以2秒的时间间隔逐个自动滚动图像?
-(void)scrollPages{
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0, self.view.frame.size.width, self.view.frame.size.height)];
scrollView.contentSize = CGSizeMake(320, 465);
[scrollView setScrollEnabled:YES];
[scrollView setPagingEnabled:YES];
[scrollView setAlwaysBounceVertical:NO];
[self.uiSubView addSubview:scrollView];
NSMutableArray *arrImage = [NSMutableArray arrayWithObjects:@"a.jpeg", @"cat.jpg", @"s.jpeg",@"ss.jpeg", nil];
for (int i = 0; i < [arrImage count]; i++)
{
CGFloat xOrigin = i * scrollView.frame.size.width;
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(xOrigin, 0, scrollView.frame.size.width, scrollView.frame.size.height)];
[imageView setImage:[UIImage imageNamed:[arrImage objectAtIndex:i]]];
[imageView setContentMode: UIViewContentModeScaleAspectFit];
[scrollView addSubview:imageView];
}
[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width * [arrImage count], scrollView.frame.size.height)];
CGFloat currentOffset = scrollView.contentOffset.x;
if(currentOffset < 2500){
CGFloat newOffset = currentOffset + 1250;
[UIScrollView beginAnimations:nil context:NULL];
[UIScrollView setAnimationDuration:3];
[scrollView setContentOffset:CGPointMake(newOffset,0.0) animated:YES];
}
答
尝试使用dispatch_after函数进行简单递归。 事情是这样的:
-(void)scrollToNextImage{
//place here code for computing and setting scrollview offset
_weak typeof(self) weakSelf = self; //for avoiding retain cycle
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[weakSelf scrollToNextImage];
});
}
请注意,这种情况下的图像将滚动,即使视图 - 控制会消失。递归只会在关闭viewcontroller后结束。如果你不想要这样的行为,你可以添加额外的条件来检查在调度下一次滚动之前viewcontroller是否可见 - 你可以检查如何做他的这里:How to tell if UIViewController's view is visible