2013-10-22 42 views
0

我有点困惑如何完成加载动态使用图像UIScrollview或其他物体...如何动态地加载图像使用的UIScrollView

![动态显示来自Web服务来图片] [1]

在上面的图像支持图像的水平和垂直滚动。我们可以使用UIScrollview或其他物体如UICollectionView来做到这一点吗?

下面是用于显示图像的7水平滚动视图的一般代码,

int x=10; 
int y=20; 

for (int i=1; i<=7; i++) 
{ 
    UIView *bgView=[[UIView alloc]initWithFrame:CGRectMake(x, y, 80, 80)]; 
    bgView.tag=i; 
    UIImageView *bgImgView=[[UIImageView alloc]initWithFrame:CGRectMake(1, 1, 55, 55)]; 
    bgImgView.tag=1; 
    bgImgView.image=[UIImage imageNamed:[NSString stringWithFormat:@"img_%d.png",i]]; 
    [bgView addSubview:bgImgView]; 
    [self.videoscrollview addSubview:bgView]; 
    x=x+80; 
} 
self.scrollview.contentSize=CGSizeMake(7*80, 84); 

我们可以处理与一个UIViewUIImageView像上面使用UIScrollview用于显示图像的方法?

我想处理UIViews大小不同,其是子视图的UIScrollView ...

我用Google搜索,但没有发现任何相关的东西。任何建议来处理这个?

+0

你的问题是知道何时/如何加载/卸载子视图到滚动视图? – Wain

+0

看看我的[答](http://stackoverflow.com/a/15804218/1603072)。 – Bhavin

+0

是@很.. OK ..我会检查它.. @ Vin – Vidhyanand

回答

0

感谢您的宝贵答案。我使用下面的代码暂时解决了上述问题。

Bool isOddViewNo; // at .h文件

isOddViewNo = YES; // at viewDidLoad

int x=10; 
int y=10; 

for (int i=0; i<=15; i++) 
{ 
    if (isOddViewNo) 
    { 
     isOddViewNo=NO; 
     UIView *oddView=[[UIView alloc]initWithFrame:CGRectMake(x, y, 90, 90)]; 
     UIImageView *oddImgView=[[UIImageView alloc]initWithFrame:CGRectMake(1, 1, 85, 85)]; 
     oddImgView.image=[UIImage imageNamed:[NSString stringWithFormat:@"img_%d.png",i]]; 
     [oddView addSubview:oddImgView]; 
     [self.scrollview addSubview:oddView]; 
     x+=90; 
    } 
    else 
    { 
     isOddViewNo=YES; 
     UIView *evenView=[[UIView alloc]initWithFrame:CGRectMake(x, y, 150, 150)]; 
     UIImageView *evenImgView=[[UIImageView alloc]initWithFrame:CGRectMake(1, 1, 145, 145)]; 
     evenImgView.image=[UIImage imageNamed:[NSString stringWithFormat:@"img_%d.png",i]]; 
     [evenView addSubview:evenImgView]; 
     [self.scrollview addSubview:evenView]; 
     x+=150; 
    } 

    if ((i+1)%3==0) 
    { 
     //if added image is 4 th image 
     y+=150; 
     x=10; 
    } 

    if (y+150>self.scrollview.frame.size.height) 
    { 
     self.scrollview.contentSize=CGSizeMake(400, y+150); 
    } 
    else 
    { 
     self.scrollview.contentSize=CGSizeMake(320, self.scrollview.frame.size.height+150); 
    } 
} 

![我在UIScrollview的每一行显示不同大小的三个视图。它可以水平和垂直滚动。这里是从模拟器拍摄的屏幕截图] [1]

1

假设你的形象的名字是喜欢:images_1/2 .../10 .../N(确保daynamic图像从这个imagename推出)

试试这个:

int x=10; int y=20; 

for (int i=1; i<=7; i++) 
{ 
     UIView *bgView=[[UIView alloc]initWithFrame:CGRectMake(x, y, 80, 80)]; 
     bgView.tag=i; 
     UIImageView *bgImgView=[[UIImageView alloc]initWithFrame:CGRectMake(1, 1, 55, 55)]; 
     bgImgView.tag=1; 

     NSString *image = [NSString stringWithFormat:@"images_%d.png",i]; 
     bgImgView.image = [UIImage imageNamed:image]; 

    [bgView addSubview:bgImgView]; 
    [self.videoscrollview addSubview:bgView]; 
    x=x+80; 
} 

self.scrollview.contentSize=CGSizeMake(7*80, 84); 

检查它是否正常工作,可能会起作用?

快乐编码。

+0

对不起,我知道使用UIScrollview动态加载图像,但我的要求不同于您的答案...我编辑了我的问题。 – Vidhyanand

0

为此,首先必须计算并检查scrollview的可见区域,即contentOffset,然后您必须为该可见部分加载对象,并在分配新对象时将其存储在数组中。由于任何图像移动到可见区域外,您应该从滚动视图中移除它。 这样,它将占用更少的内存,并且可以加载许多图像而不会收到内存警告。

你可以按照这篇文章得到一些提示如何从滚动视图

添加和删除对象

http://www.raywenderlich.com/10518/how-to-use-uiscrollview-to-scroll-and-zoom-content

+0

感谢您的建议... 我需要确切的功能你在你的答案中说什么..你可以给示例代码.. @ Dushyant Singh – Vidhyanand

+0

请按照我给出的链接。这不是你正在寻找的特定代码,但你可以根据你的使用来调整它。 –

0
Try this for dynamic image From NSBundle: 

NSString * resourcePath = [[NSBundle mainBundle] resourcePath]; 
NSError * error; 
NSArray * directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:resourcePath error:&error]; 
NSMutableArray *imageArray = [[NSMutableArray alloc]init]; 

for (int i=0; i<directoryContents.count; i++) { 
    NSString *pathExtension = [[directoryContents objectAtIndex:i] pathExtension]; 
    if ([pathExtension isEqualToString:@"png"] || [pathExtension isEqualToString:@"jpg"]) { 
     [imageArray addObject:[directoryContents objectAtIndex:i]]; 
    } 
} 
Now u have array of all images 

for (int i=1; i<=imageArray.count; i++) 
{ 
    UIView *bgView=[[UIView alloc]initWithFrame:CGRectMake(x, y, 80, 80)]; 
    bgView.tag=i; 
    UIImageView *bgImgView=[[UIImageView alloc]initWithFrame:CGRectMake(1, 1, 55, 55)]; 
    bgImgView.tag=1; 
    bgImgView.image=[UIImage imageNamed:[imageArray objectAtIndex:i]]; 
    [bgView addSubview:bgImgView]; 
[self.videoscrollview addSubview:bgView]; 
    x=x+80; 

} self.scrollview.contentSize = CGSizeMake(I * 80,84);

+0

对不起,我知道使用UIScrollview从Web服务或系统中动态加载图像,但我的要求与您的答案不同......使用UIScrollview处理不同的UIViews大小。 我编辑了我的问题。 – Vidhyanand