Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.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
Iphone 如何在UIScrollView上重用视图_Iphone_Objective C_Uiview_Uiscrollview_Uiscrollviewdelegate - Fatal编程技术网

Iphone 如何在UIScrollView上重用视图

Iphone 如何在UIScrollView上重用视图,iphone,objective-c,uiview,uiscrollview,uiscrollviewdelegate,Iphone,Objective C,Uiview,Uiscrollview,Uiscrollviewdelegate,我有三个ui视图(320*568)。我想在scrollView上重用它们。就像我们对可移植细胞所做的那样。 我有宽度为320X10的UIscrollView。i、 它可以显示10个视图。但我只想使用3个视图。这是我的代码,但当我滚动太快时,它不能正常工作。请帮忙 我在-(void)scrollViewDidScroll:(UIScrollView*)发送器中添加了相同的代码 那么它就可以正常工作了。但它会打印NSLog(“你好”);大约10-15次,当我只滚动一页时。 . . . . (无效)

我有三个
ui视图
(320*568)。我想在
scrollView
上重用它们。就像我们对可移植细胞所做的那样。 我有宽度为320X10的
UIscrollView
。i、 它可以显示10个视图。但我只想使用3个视图。这是我的代码,但当我滚动太快时,它不能正常工作。请帮忙

我在-(void)scrollViewDidScroll:(UIScrollView*)发送器中添加了相同的代码 那么它就可以正常工作了。但它会打印NSLog(“你好”);大约10-15次,当我只滚动一页时。 . . . .

(无效)ScrollViewDiEndDecelling:(UIScrollView*)scrollView{
NSlog(“你好”);
int pageCurrent=scrollView.contentOffset.x/scrollView.frame.size.width;
if(scrollView.contentOffset.x<320)
{
a=0;
b=320;
c=640;
}
else if(scrollView.contentOffset.x>=320)
{
if(scrollView.contentOffset.x==320)
{
a=0;
b=320;
c=640;
}
else if(toCheckScrollNumber==PageCurrent)
{
}
else if(当前页面>当前页面)
{
最大值=最大值(c,最大值(a,b));
smallVal=MIN(c,MIN(a,b));
if(smallVal==a)
{
a=较大值+320;
}
else if(smallVal==b)
{
b=较大值+320;
}
else if(smallVal==c)
{
c=较大值+320;
}
}
else if(当前页面<当前页面)
{
最大值=最大值(c,最大值(a,b));
smallVal=MIN(c,MIN(a,b));
如果(大数值==a)
{
a=smallVal-320;
}
else if(largeVal==b)
{
b=smallVal-320;
}
else if(largeVal==c)
{
c=smallVal-320;
}
}
}
NSLog(@“a=%d,b=%d,c=%d”,a,b,c);
[_otlsubview1setframe:CGRectMake(a,0320568)];
[_otlsubview2setframe:CGRectMake(b,0320568)];
[_otlsubview3setframe:CGRectMake(c,0320568)];
intPreviousPage=PageCurrent;
}

您应该使用
scrollViewDidScroll
函数进行视图重用,而不是
DidEndDecreating
——只有当滚动视图已经减速时才调用后者


由于您的视图非常小(10像素高),因此可能还需要提前添加一些视图(例如,不仅一个视图将变得可见,而且可能已经提前了3个视图,
UITableView
还预加载了几行。

您需要进行分页,为什么不使用UICollectionView呢?您可以直接使用此功能。@KakoSquid由于某些UI要求,我不能使用UICollectionView。@阿马尔:那太长了,我已经完成了剩下的部分IU@amar非常感谢。是的,它很有效。我已经更新了问题,请看一下。我已经实现了相同的。是的,它很有效。但是在实现过程中存在一些问题。视图上有8个图像。它们将来自WEB服务。我相信它会的造成问题。因为我在scrollViewDidScroll()中记录(“hello”)并打印多次,几乎15-20次。scrollViewDidScroll被称为很多次-每次scroll视图确实滚动,顾名思义:-)。当然,您不应该每次滚动视图时都重新排列子视图,而是应在需要时应用一些逻辑添加子视图,然后将其保留。来自web服务的图像只应在后台异步加载一次并进行缓存(请参见此类了解如何操作:)。是的,对于web服务,我现在正在使用(void)ScrollViewDiEndDecelling:(UIScrollView*)scrollView{}其中我将为Web服务编写代码,并将在-(void)scrollViewDidScroll:(UIScrollView*)委托中编写重用UIView代码,Soleved:)
(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

    NSlog("hello");
    int pageCurrently = scrollView.contentOffset.x / scrollView.frame.size.width;

if (scrollView.contentOffset.x < 320)
{
    a=0;
    b=320;
    c=640;
}
else if (scrollView.contentOffset.x >= 320)
{

    if(scrollView.contentOffset.x == 320)
    {
        a=0;
        b=320;
        c=640;
    }
    else if(toCheckScrollNumber == pageCurrently )
    {

    }
    else if(pageCurrently > intPreviousPage)
    {


        largeVal=MAX(c, MAX(a, b));
        smallVal=MIN(c, MIN(a, b));

       if(smallVal==a)
       {
           a = largeVal + 320;
                      }
       else if(smallVal==b)
       {

           b = largeVal + 320;

       }
       else if (smallVal==c)
       {
           c = largeVal + 320;

       }

    }

    else if(pageCurrently < intPreviousPage)
    {

        largeVal=MAX(c, MAX(a, b));
        smallVal=MIN(c, MIN(a, b));

        if(largeVal==a)
        {
            a = smallVal - 320;

        }
        else if(largeVal==b)
        {
            b = smallVal - 320;

        }
        else if (largeVal==c)
        {
            c = smallVal - 320;

        }


    }


}

NSLog(@"a=%d , b=%d , c=%d ",a,b,c);

[_otlSubView1 setFrame:CGRectMake(a, 0, 320, 568)];
[_otlSubView2 setFrame:CGRectMake(b, 0, 320, 568)];
[_otlSubView3 setFrame:CGRectMake(c, 0, 320, 568)];

    intPreviousPage=pageCurrently;


}