2013-10-22 40 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