2011-06-03 138 views
0

我试图创建一个图像库存储在资源包中的图像。我存储我的图像在NSMutable阵列我想要的是一个图像库....但输出是非常不同于我期望的笏。下面的代码工作完全fine.to更具体的荤你们帮我下面是代码...创建一个图像库

enter image description here

_images =[NSMutableArray arrayWithObject:[UIImage imageNamed:@"logo1.png"]]; 
[_images addObject:[UIImage imageNamed:@"logo2.png"]]; 
[_images addObject:[UIImage imageNamed:@"logo3.png"]]; 
[_images addObject:[UIImage imageNamed:@"logo4.png"]]; 
[_images addObject:[UIImage imageNamed:@"logo5.png"]]; 
[_images addObject:[UIImage imageNamed:@"logo6.png"]]; 
[_images addObject:[UIImage imageNamed:@"logo7.png"]]; 
[_images addObject:[UIImage imageNamed:@"logo8.png"]]; 
[_images addObject:[UIImage imageNamed:@"logo9.png"]]; 
[_images addObject:[UIImage imageNamed:@"logo10.png"]]; 
[_images addObject:[UIImage imageNamed:@"logo11.png"]]; 
[_images addObject:[UIImage imageNamed:@"logo12.png"]]; 
[_images addObject:[UIImage imageNamed:@"logo13.png"]]; 
[_images addObject:[UIImage imageNamed:@"logo14.png"]]; 
[_images addObject:[UIImage imageNamed:@"logo15.png"]]; 
[_images addObject:[UIImage imageNamed:@"logo16.png"]]; 

NSLog(@"ha ha ha:%d",_images.count); 



UIScrollView *view = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
int row=0; 
int coloumn=0; 
for (int i=0; i< _images.count; i++) 
{ 
    UIImage *thumb=[_images objectAtIndex:i]; 
    UIButton *button=[UIButton buttonWithType:UIButtonTypeCustom]; 
    button.frame=CGRectMake(coloumn*100+24, row*80+30, 64, 64); 
    [button setImage:thumb forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    button.tag=i; 
    [view addSubview:button]; 
    if (coloumn==2) { 
     coloumn==0; 
     row++; 
    }else { 
     coloumn++; 
    } 

} 

[view setContentSize:CGSizeMake(320, (row+1)*80+10)]; 
self.view=view; 
[view release]; 

回答

0

使用three20库

iPhone SDK: Creating a Photo Gallery With Three20

enter image description here

编辑:

你的代码是除了在错误的声明优秀:

coloumn==0; 

这是你的colomn始终指向第二coloumn的原因。

因此将其更改为coloumn = 0;

+0

我试过使用three20 ...它不与标签栏应用程序集成..并且非常复杂 – kingston 2011-06-03 07:07:46

+0

@kingston:检查我更新的答案。 – Jhaliya 2011-06-03 07:17:24

2

与您的代码的问题是在这里:

if (coloumn==2) { 
    coloumn==0; //-- ERROR! 
    row++; 

这应该是:使用

coloumn=0; //-- correct! 

==而不是=

+0

@sergio:没有冒犯的家伙,在看到我6分钟前更新的答案后(现在),您刚刚通过添加一些文本发布了答案,这不是很好,我们需要维护并遵循一些隐含的规则。 – Jhaliya 2011-06-03 07:26:01

+0

感谢男人......它的工作很好 – kingston 2011-06-03 07:29:14

+0

@Jhaliya:我真的不明白你怎么说......没有冒犯,但请放心,这不是真的。 – sergio 2011-06-03 07:32:31

0

这工作得很好,但是你必须在更改大小时对代码进行一些调整。复制并粘贴到您的Viewdidload;确保你有一个UIScrollview IB已经设置链接名称scrollView

int row = 0; 
int colomn = 0; 
int width = 79; 
int height = 79; 
int offset = 1; 
// int diff = width * 0.5; 
CGRect rect; 

for (int i = 0; i < 45; i++) { 

    if(i == 0){ 

     colomn = 0; 

    }else{ 

     colomn += width + offset; 

    }; 

    if(colomn >= ((int)scrollView.frame.size.width) - width){ 

     colomn = 0; 
     row += height + offset; 

    } 

     rect = CGRectMake(colomn, row, width, height); 


    UIView *view = [[UIView alloc] initWithFrame:rect]; 
    [view setBackgroundColor:[UIColor redColor]]; 
    [scrollView addSubview:view]; 

} 

[scrollView setContentSize:CGSizeMake(320, row+height)]; 
+0

更好的解决方案是基于视图约束对网格进行建模,以便应用程序可以根据更改进行调整,允许在滚动视图之外进行分页,以及操纵网格对象本身而不是硬编码位置并将它们设置在视图中。一旦这些图像设置在滚动视图中,您无法对事件做出响应,而无需重复所有相同的逻辑来进行点击测试,并且您没有对照片的对象标识。 – 2012-09-18 05:41:14

+0

请你可以编写代码来达到这个效果吗? – codebender 2012-09-27 23:49:04