UIScrollView与IOS中的左和右箭头

我有一个UIScrollView与左右button的图像集。 我已经实现了使用此代码左侧移动图像的左侧button动作

if ( scroll.contentOffset.x <= scroll.frame.size.width ) { CGRect frame; frame.origin.x = scroll.contentOffset.x + scroll.frame.size.width; frame.origin.y = 0; frame.size = scroll.frame.size; //NSLog(@"%f %f %f", frame.origin.y ,scroll.frame.size.width, frame.origin.x); [scroll scrollRectToVisible:frame animated:YES]; } 

它的工作完美

同样我实现右键button操作function不正常我在做什么错误的代码是在下面

 if ( scroll.frame.size.width <= scroll.contentOffset.x ) { CGRect frame; frame.origin.x = scroll.contentOffset.x - scroll.frame.size.width; frame.origin.y = 0; frame.size = scroll.frame.size; [scroll scrollRectToVisible:frame animated:YES]; } 

它应该与左边相反,检查:是否大于,并从当前x位置减去scrollview宽度

 if ( scroll.contentOffset.x >= scroll.frame.size.width ) { CGRect frame; frame.origin.x = scroll.contentOffset.x - scroll.frame.size.width; frame.origin.y = 0; frame.size = scroll.frame.size; //NSLog(@"%f %f %f", frame.origin.y ,scroll.frame.size.width, frame.origin.x); [scroll scrollRectToVisible:frame animated:YES]; } 

对于右键,你为什么要检查contentOffset.y? 它应该是contentOffset.x,也有启用分页?

使用这个,我认为它会解决

 if ( _scroll.contentOffset.x >= _scroll.frame.size.width/2 ) { CGRect frame; frame.origin.x = _scroll.contentOffset.x - _scroll.frame.size.width; frame.origin.y = 0; frame.size = _scroll.frame.size; //NSLog(@"%f %f %f", frame.origin.y ,scroll.frame.size.width, frame.origin.x); [_scroll scrollRectToVisible:frame animated:YES]; } 

左侧function是正确的,而右侧function假设你想创build水平滚动条,你应该使用x原点和宽度。 你的条件和右侧的代码应该基于x原点,宽度,基本上所有那些负责水平滚动的参数

MMm ..我build议你以另一种方式做到这一点。 创build两个button并单独操作方法rightArrowNavigation,leftArrowNavigation。 在我的代码中添加一个全局的int值在currentPage中,在viewDidLoad中赋值为0

 - (IBAction)rightArrowNavigation:(id)sender { CGRect bounds = self.scrollView.bounds; bounds.origin.x = CGRectGetWidth(bounds) * (currentPage + 1); [self.scrollView scrollRectToVisible:bounds animated:YES]; } - (IBAction)leftArrowNavigation:(id)sender { CGRect bounds = self.scrollView.bounds; bounds.origin.x = CGRectGetWidth(bounds) * (currentPage - 1); [self.scrollView scrollRectToVisible:bounds animated:YES]; } 

随着scrollview分页启用。 如果你不想分页启用一些更多的math。

 (IBAction)leftButtonClicked:(id)sender { if (self.iTemScrollView.contentOffset.x < self.iTemScrollView.contentSize.width - self.iTemScrollView.frame.size.width){ [self.iTemScrollView setContentOffset:CGPointMake(self.iTemScrollView .contentOffset.x + self.iTemScrollView .frame.size.width, 0) animated:YES]; } } (IBAction)rightButtonClicked:(id)sender { NSLog(@" rightbutton self.iTemScrollView.contentOffset.x %f",self.iTemScrollView.contentOffset.x); NSLog(@"rightbutton self.iTemScrollView.contentOffset.y %f",self.iTemScrollView.contentOffset.y); if (self.iTemScrollView.contentOffset.x>0){ [self.iTemScrollView setContentOffset:CGPointMake(self.iTemScrollView .contentOffset.x - self.iTemScrollView .frame.size.width, 0) animated:YES]; } } 
 -(IBAction)leftScroll:(id)sender { //page variable initialize to 0 in view did load method if(page!=0) { CGRect frame = scrollEvent.frame; frame.origin.x = frame.size.width * (--page); frame.origin.y = 0; [scrollEvent scrollRectToVisible:frame animated:YES]; } } - (IBAction)rightScroll:(id)sender { if(arrData.count>page) { CGRect frame = scrollEvent.frame; frame.origin.x = frame.size.width * (++page); frame.origin.y = 0; [scrollEvent scrollRectToVisible:frame animated:YES]; } }