Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 检测UIScrollView位置_Objective C_Ios_Uiscrollview_Contentoffset - Fatal编程技术网

Objective c 检测UIScrollView位置

Objective c 检测UIScrollView位置,objective-c,ios,uiscrollview,contentoffset,Objective C,Ios,Uiscrollview,Contentoffset,我正在尝试将UIScrollView用作iOS应用程序中的导航设备。基本上,我希望应用程序根据支持分页的UIScrollView的位置加载特定内容。它有点像一个导航轮 目前,我有一个两页(2*320)的scrollview,我正在使用ScrollViewDiEndDragingdelegate方法和contentoffset.x加载适当的内容。我尝试确定滚动视图的位置,如下所示: if (scrollView.contentOffset.x < 320) { // Load cont

我正在尝试将UIScrollView用作iOS应用程序中的导航设备。基本上,我希望应用程序根据支持分页的UIScrollView的位置加载特定内容。它有点像一个导航轮

目前,我有一个两页(2*320)的scrollview,我正在使用
ScrollViewDiEndDraging
delegate方法和
contentoffset.x
加载适当的内容。我尝试确定滚动视图的位置,如下所示:

if (scrollView.contentOffset.x < 320) {
   // Load content 1
    }
else if (scrollView.contentOffset.x >= 320) {
   // Load content 2
    }
if(scrollView.contentOffset.x<320){
//加载内容1
}
else if(scrollView.contentOffset.x>=320){
//加载内容2
}
我的问题是,我不了解如何使用contentoffset,或者它不适合处理我的问题。不管怎样,我都被卡住了。有人能告诉我哪里出了问题和/或告诉我一种更有效的方法来确定scrollview位置吗

我很笨,我忘了提问题是什么。。。基本上,我无法跟踪scrollview的位置。当我移动到第二页时,它只记录超过620限制(向右反弹)时的更改。但当我回到起始位置(第1页)时,它确实记录了更改。换句话说,我的追踪不准确


代表和其他一切工作正常,我记录他们

这很难说,因为你从未明确提到问题所在,但我会猜一下

如果根本没有调用委托方法,则需要记住设置滚动视图委托:

[myScrollView setDelegate:self]

否则,使用
ScrollViewDiEndDraging
检测滚动视图偏移的问题是,它将检查停止拖动的点处的偏移量,该点可能位于目标页面矩形或起始页面矩形内。或者,我建议您使用
ScrollViewDiEndDecelling
检查内容偏移量,因为一旦滚动视图在其目标页面停止,就会调用内容偏移量

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    if (scrollView.contentOffset.x < 320) {
        NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset));
    }
    else if (scrollView.contentOffset.x >= 320) {
        NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset));
    }
}
-(无效)ScrollViewDiEndDecelling:(UIScrollView*)scrollView{
if(scrollView.contentOffset.x<320){
NSLog(@“%@”,NSStringFromCGPoint(scrollView.contentOffset));
}
else if(scrollView.contentOffset.x>=320){
NSLog(@“%@”,NSStringFromCGPoint(scrollView.contentOffset));
}
}

我想这可以帮助您:)。使用
scrollViewDidScroll
可以始终获得scrollView的确切位置:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.x < 320)
    {
         // Load content 1
    }
    else if (scrollView.contentOffset.x >= 320)
    {
         // Load content 2
    }
}
-(无效)scrollViewDidScroll:(UIScrollView*)scrollView
{
if(scrollView.contentOffset.x<320)
{
//加载内容1
}
else if(scrollView.contentOffset.x>=320)
{
//加载内容2
}
}
NSLog(@“位置:%g”,scrollView.contentOffset.x)


不要忘记.h文件中的委托
UIScrollViewDelegate

这里有一个将当前位置(页面)获取为整数值的解决方案: 使用ScrollViewDiEndDecelling:methode:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    NSLog(@"%i", (int)(_scrollView.contentOffset.x / _scrollView.frame.size.width));
}

使用UIScrollViewDelegate

 func scrollViewWillBeginDragging(scrollView: UIScrollView){
        print("dragging begins")
        print("Position:  \(scrollView.contentOffset.x) , \(scrollView.contentOffset.y) ")
    }

如果出于任何原因,您希望在视图停止减速之前收到通知;例如,执行动画。您还可以使用以下选项:

func-scrollViewWillendDraging(scrollView:UIScrollView,withVelocity:CGPoint,targetContentOffset:UnsafemeutablePointer){
//滚动将结束的位置(垂直)
让offSetY=targetContentOffset.pointee.y
//我有一个启用分页的滚动视图,所以我用它来检查选择了哪个“页面”。
如果offSetY==firstPageView.frame.origin.y{
//做点什么…
}如果offSetY==secondPageView.frame.origin.y,则为else{
//做点什么…
}
}

不幸的是,is不能解决我的问题。我添加了一些额外的信息来澄清问题所在。