我可以自动创建UIImageView的实例吗?

时间:2014-02-15 23:42:06

标签: ios iphone objective-c ipad

现在我创建如下(我的file.h):

UIImageView *pic1, *pic2, *pic3, *pic4, *pic5, *pic6, *pic7, *pic8, *pic9, *pic10;

Then in my (file.m):

UIImageView *pic1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@”picName.png”]];

UIImageView *pic2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@”picName.png”]];
……

UIImageView *pic10 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@”picName.png”]];

在这种情况下,我需要UIImageView的许多实例(由其他因素触发的数字)。

有没有办法在我的file.m中自动创建多个UIImageView实例,不知何故如下?:

for (int x; (x=10); x++)
{
    UIImageView * pic[x] = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myPic.png"]];
}

此示例不起作用,但我想展示我想要编程的内容。

2 个答案:

答案 0 :(得分:6)

当然你可以 - 这就是数组的用途:

NSMutableArray *pics = [NSMutableArray array];
for (int i = 0 ; i != 10 ; i++) {
    [pics addObject:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myPic.png"]]];
}

如果图片的名称取决于索引,请使用NSString&#39; s stringWithFormat生成图片的名称 - 例如,您可以这样做:< / p>

NSMutableArray *pics = [NSMutableArray array];
for (int i = 0 ; i != 10 ; i++) {
    NSString *imgName = [NSString stringWithFormat:@"myPic%d.png"];
    [pics addObject:[[UIImageView alloc] initWithImage:[UIImage imageNamed:imgName]]];
}

答案 1 :(得分:0)

如果图像名称遵循标准模式,您只需循环所需的数量,并使用索引动态构建图像名称。

如果图像的名称不符合标准模式,您可以将它们放入阵列并循环遍历它们

NSArray *imageNames = @[
  @"alarm.jpg",
  @"bell.jpg",
  @"car.jpg"
];

NSMutableArray *imageViews = [[NSMutableArray alloc] init];

for (NSString *imageName in imageNames) {
  [imagesViews addObject:({
    [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]];
  })];
}

完全可选 - 进一步阅读

你可以自己写一个简单的类别来抽象这个循环并将结果收集到一个新的数组中。这将允许您简单地写

NSArray *imageNames = @[
  @"alarm.jpg",
  @"bell.jpg",
  @"car.jpg"
];

NSArray *imageViews = [imageNames pas_arrayByMappingWithBlock:^(id obj){
  return [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]];
}];

这样做的类别如下所示:

@interface NSArray (PASAdditions)

- (NSArray *)pas_arrayByMappingWithBlock:(id (^)(id obj))block

@end

@implementation NSArray (PASAdditions)

- (NSArray *)pas_arrayByMappingWithBlock:(id (^)(id obj))block
{
  NSMutableArray *result = [[NSMutableArray alloc] init];

  for (id obj in self) {
    [result addObject:block(obj)];
  }

  return [result copy];
}

@end