如何使用Objective C以2秒的间隔一张一张地自动滚动图像?

Posted

技术标签:

【中文标题】如何使用Objective C以2秒的间隔一张一张地自动滚动图像?【英文标题】:How to autoscroll images one by one by the interval of 2 seconds, using Objective C? 【发布时间】:2017-02-04 07:22:27 【问题描述】:

我已经为少数图像集合制作了滚动视图,我希望它以 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];
    

【问题讨论】:

【参考方案1】:

尝试使用 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 在调度下一个滚动之前是否可见 - 你可以在这里检查如何做他:How to tell if UIViewController's view is visible

【讨论】:

以上是关于如何使用Objective C以2秒的间隔一张一张地自动滚动图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UICollectionView Image 一张一张删除

如何一张一张地做表格行动画

如何通过单击swift4中的addImage按钮将图像一张一张添加到tableviewcell中

如何用格式工厂把视频转化为一张一张的图片

Flutter- 图像选择器包:通过删除操作一张一张地显示图像

一张一张复制范围值