我正在使用一个项目,我正在使用UICollectionView来创建一个“图像报告器”,我在那里广告一系列标志. collectionView是一个项目高和十二个项目长,一次显示两到三个项目(取决于徽标的大小可见).
我想从第一个项目到最后一个缓慢的自动滚动动画,然后重复.
有没有人能够做这项工作?我可以使滚动工作
[myCollection scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:(myImages.count -1) inSection:0] atScrollPosition:UICollectionViewScrollPositionRight animated:YES];
但这太过分了!
[UIView animateWithDuration:10 delay:2 options:(UIViewAnimationOptionAutoreverse + UIViewAnimationOptionRepeat) animations:^{ [myCollection scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:(myImages.count -1) inSection:0] atScrollPosition:UICollectionViewScrollPositionRight animated:NO]; } completion:nil];
这产生了所需的滚动速度,但是只有最后几个单元格在系列中可见.我怀疑他们(甚至起始的可见细胞)正在出场.
有什么想法吗?
解决方法
你可以尝试这种方法:
@property (nonatomic,assign) CGPoint scrollingPoint,endPoint; @property (nonatomic,strong) NSTimer *scrollingTimer; @synthesize scrollingPoint,endPoint; @synthesize scrollingTimer; - (void)scrollSlowly { // Set the point where the scrolling stops. self.endPoint = CGPointMake(0,300); // Assuming that you are starting at {0,0} and scrolling along the x-axis. self.scrollingPoint = CGPointMake(0,0); // Change the timer interval for speed regulation. self.scrollingTimer = [NSTimer scheduledTimerWithTimeInterval:0.015 target:self selector:@selector(scrollSlowlyToPoint) userInfo:nil repeats:YES]; } - (void)scrollSlowlyToPoint { self.collectionView.contentOffset = self.scrollingPoint; // Here you have to respond to user interactions or else the scrolling will not stop until it reaches the endPoint. if (CGPointEqualToPoint(self.scrollingPoint,self.endPoint)) { [self.scrollingTimer invalidate]; } // Going one pixel to the right. self.scrollingPoint = CGPointMake(self.scrollingPoint.x,self.scrollingPoint.y+1); }