IOS中带有左右箭头的UIScrollView

Posted

技术标签:

【中文标题】IOS中带有左右箭头的UIScrollView【英文标题】:UIScrollView with left and right arrows in IOS 【发布时间】:2015-03-31 07:23:58 【问题描述】:

我有一个 UIScrollView,其中包含一组带有左右按钮的图像。我已经实现了使用此代码移动图像左侧的左键操作

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

【问题讨论】:

可以参考这个链接***.com/questions/2234875/… 我假设滚动视图是水平的,水平意味着改变 x,在这里你将 X 设置为零并计算 Y,并且你正在检查 IF 中的 y 位置 @RaheelSadiq 是的,我正在使用水平滚动更新我的代码。但是当我单击右键时,它会完全滚动 @Ben10 查看答案 在您的代码中,代码在 if 条件块内执行? 【参考方案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];

【讨论】:

【参考方案2】:

MMm.. 我建议您以另一种方式执行此操作。创建两个按钮和单独的操作方法 rightArrowNavigation, leftArrowNavigation 。在我的代码 currentPage 中添加一个全局 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];

【讨论】:

当前页面是什么? 您当前正在查看的页面,您需要按上面代码中此处遗漏的箭头来增加和减少其值。【参考方案3】:

对于右键,为什么要检查 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];
    

【讨论】:

使用上述测试解决方案。【参考方案4】:

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

【讨论】:

【参考方案5】:

启用滚动视图分页。如果您不想启用分页,请尝试更多数学运算。

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


【讨论】:

【参考方案6】:
-(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];
          
      

【讨论】:

以上是关于IOS中带有左右箭头的UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

Java 8 中带有 2 个箭头的 lambda 是啥意思?

pyqtgraph中带有箭头的自定义LinearRegionItem

setState Dart/Flutter 中带有花括号的胖箭头符号

Android的java代码(下边红波浪线)中带的箭头(“->”)怎么取消

左右箭头键问题

流程图中的带箭头的线段代表啥?