IOS中带有左右箭头的UIScrollView

IOS中带有左右箭头的UIScrollView,ios,objective-c,iphone,uiscrollview,Ios,Objective C,Iphone,Uiscrollview,我有一个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;

我有一个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.contentOffset.x左侧功能正确,而右侧功能假设您想要创建水平滚动条,则应使用x原点和宽度。右侧的条件和代码应基于x原点、宽度,基本上所有负责水平滚动的参数g

左侧功能是正确的,而对于右侧功能,假设您想要创建水平滚动条,您应该使用x原点和宽度。右侧的条件和代码应该基于x原点、宽度,基本上所有负责水平滚动的参数都应该是在左侧的对面,检查:如果大于,则从当前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];
}

它应该与左侧相对,检查:如果大于,则从当前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];
}

嗯..我建议您以另一种方式执行此操作。创建两个按钮和单独的操作方法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];
}

嗯..我建议您以另一种方式执行此操作。创建两个按钮和单独的操作方法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];
}

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

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

启用scrollview分页。如果不想启用分页,请尝试更多的数学运算

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

}
(iAction)左按钮点击:(id)发件人{
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)已设置动画:是];
}
}
(iAction)右按钮单击:(id)发件人{
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)动画:是];
}
}

启用scrollview分页功能。如果不想启用分页功能,请尝试更多的数学运算

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

}
(iAction)左按钮点击:(id)发件人{
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)已设置动画:是];
}
}
(iAction)右按钮单击:(id)发件人{
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)动画:是];
}
}

您可以参考此链接,我假设scrollview是水平的,水平意味着更改x,这里您正在设置x零并计算Y,同时您正在检查中的Y位置IF@RaheelSadiq是的,我正在使用水平滚动更新我的代码。但当我点击右键时,它将完全消失scroll@Ben10检查代码中的答案,在if条件块内执行代码?您可以参考此链接我假设scrollview是水平的,水平意味着更改x,这里您设置x零并计算Y,同时还检查中的Y位置IF@RaheelSadiq是的,我正在使用水平滚动更新我的代码。但当我点击右键时,它会完全滚动ll@Ben10检查答案在您的代码中,代码在if条件块内执行?使用上面测试的解决方案。使用上面测试的解决方案。当前页面是什么?您当前正在查看的页面,您需要按上面代码中缺少的箭头增加或减少其值。当前页面是什么?当前页面是什么在查看时,您需要按上面代码中缺少的箭头来增加和减少其值。