uiscrollview中的低分辨率图像,直到屏幕上或后退一个/加一个

时间:2012-08-23 18:47:51

标签: ios uiscrollview

我有uiscrollview我发送了一系列低分辨率图片。当滚动视图滚动时,它应该检查当前页面并+/-1并用来自另一个阵列的高分辨率图像替换低分辨率图像。我的代码ALMOST完美无缺。

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
pageCOntrolBeingUsed = NO;

//calculate the current page that is shown

CGFloat pageWidth = self.uis_valueScrollview.frame.size.width;
    int page = floor((self.uis_valueScrollview.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
    self.uis_valuePageControl.currentPage = page;
    NSLog(@"page %i",page);

    // display the image and +/-1 for smoother scrolling

        CGRect frame;
        frame.origin.x = self.uis_valueScrollview.frame.size.width * page;
        frame.origin.y = 0;
        frame.size = self.uis_valueScrollview.frame.size;

        UIImageView *subview = [[UIImageView alloc] initWithFrame:frame];
        [subview setContentMode:UIViewContentModeScaleAspectFit];
        subview.image = [ebappdelegate.arr_highRezImages objectAtIndex:page];
        subview.tag = page+1;
        [self.uis_valueScrollview addSubview:subview];

     //remove image views except -1 and +1 of the current page

    for ( int i = 0; i < [ebappdelegate.arr_ValueImages count]; i++ ) {
          if ( (i < (page-1) || i > (page+1)) && [uis_valueScrollview viewWithTag:(i+1)] ) {
            [[uis_valueScrollview viewWithTag:(i+1)] removeFromSuperview];
              [[uis_valueScrollview viewWithTag:(i-1)] removeFromSuperview];
             [(UIImageView*)[uis_valueScrollview viewWithTag:page] setImage:[ebappdelegate.arr_lowrezImages objectAtIndex:page]];
            subview.tag = page+1;
            [self.uis_valueScrollview addSubview:subview];
            NSLog(@"remove");
        }
    }

}

所以现在一个函数(不在这里)预先加载lowrez图像数组。滚动后,我可以访问highrez数组。一旦图像滚动(+/-1),我想用较低的分辨率替换较高的图像。

它会这样做但有时会创建额外的图像视图(我记录uiimageview iskindofclass并且数字会上下移动,大于数组的数量所以我知道正在创建额外的内容而不是除去。

任何指针?我认为这是一个很好的方式,并且非常接近 - 但也会采取任何建议。

2 个答案:

答案 0 :(得分:1)

代码没有错。你做得很完美。 您找到的计数增加是由于指标图像。

每个UIScrollView类包含水平和垂直滚动指示符和阴影。这些成员的类型为UIImageView。因此,当您记录UIImageView类时,它也会计算这三个子视图。

答案 1 :(得分:0)

我认为这就是你要找的http://developer.apple.com/library/ios/#samplecode/ScrollViewSuite/Listings/3_Tiling_Classes_TiledScrollView_m.html

它是苹果的一个演示应用程序,可以完全满足您的需求......