我有一个uiscrollview
我发送一组低分辨率图像。当滚动视图滚动时,它应该检查当前页面,+/-1
并用另一个数组中的高分辨率图像替换低分辨率图像。我的代码几乎完美地做到了这一点。
- (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
并且数字会上下移动,大于数组的计数,所以我知道正在创建额外的而不是删除。
任何指针?我认为这是一个很好的方法并且非常接近 - 但也会接受任何建议。