2015-03-31 101 views
0

我有一个带有左右按钮的图像组的UI​​ScrollView。我有实现左键操作使用此代码移动左侧的图像UIScrollView在IOS中的左右箭头

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]; 
    } 

其完美的工作

同我实现我在做什么错误代码是正确的按钮动作不能正常工作的功能下面

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]; 
    } 
+0

您可以参考以下链接http://stackoverflow.com/questions/2234875/programmatically-scroll-a-uiscrollview – iPhoneDev 2015-03-31 07:28:16

+0

我假设滚动视图是水平的,横指更改x,和你在这里正在设置X零和计算Y,并且您还在IF – 2015-03-31 07:28:56

+0

@RaheelSadiq是检查y位置是的,我正在使用水平滚动我更新我的代码。但是当我单击右键完全滚动 – Ben10 2015-03-31 07:37:54

回答

0

个左侧functioanlity是正确的,而对于右侧的功能假设你要创建水平滚动条,你应该用x原点和宽度工作。右侧的条件和代码应该基于x原点,宽度,基本上所有那些负责水平滚动的参数

1

它应该与左边相反,检查:如果它大于,并且减去滚动视图宽度从当前x位置

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]; 
} 
0

MMm ..我建议你以另一种方式做到这一点。创建两个按钮并单独操作方法rightArrowNavigation,leftArrowNavigation。在我的代码页当前位置添加一个全局int值,并在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]; 
} 
+0

什么是当前页? – hd1344 2017-03-28 10:11:46

+0

您正在查看的页面,您需要按上面代码中错过的箭头来增加和减少其值。 – Ajumal 2017-03-28 11:00:10

1

对于右侧的按钮,你为什么对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]; 
    } 
+0

看到我更新的问题。我启用了分页 – Ben10 2015-03-31 08:33:41

+0

使用上面的测试解决方案。 – 2015-04-01 12:03:47

0

启用滚动视图页面。如果你不想启用分页,请尝试更多的数学。

(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]; 
    } 

} 
0
-(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]; 
      } 
     } 
相关问题