0

私のiPadアプリには200枚の画像があり、これらの画像を配列に追加しています。
次に、この配列をループして画像ビューに追加します。次に、このイメージ ビューをスクロール ビューのサブ ビューとして追加します。

アプリを開くと、アプリがクラッシュします。
画像サイズを小さくしてみます。しかし、うまくいきませんでした。

私の友人の 1 人は、最初に image1 と image2 だけを追加するように言いました。
ユーザーがimage1をスクロールすると、image2が表示されます。
その後、image1 は画像ビューから削除されます。
image3 を画像ビューに追加します。

彼は、メモリ使用量を維持できると述べました。
しかし、どうすればそれができるのかわかりませんか?:D
例を教えてください。
前もって感謝します。

私のコードはここにあります、

- (void)viewDidLoad
{
[super loadView];
self.view.backgroundColor = [UIColor grayColor];

UIScrollView *ScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 44, self.view.frame.size.width, self.view.frame.size.height)];
ScrollView.pagingEnabled = YES;

// Create a UIImage to hold Info.png
UIImage *image1 = [UIImage imageNamed:@"Image-001.jpg"];
UIImage *image2 = [UIImage imageNamed:@"Image-002.jpg"];
UIImage *image200 = [UIImage imageNamed:@"Image-200.jpg"];

NSArray *images = [[NSArray alloc] initWithObjects:image1,image2,...,image200,nil];

NSInteger numberOfViews = 200;
for (int i = 0; i < numberOfViews; i++) 
{
CGFloat xOrigin = i * self.view.frame.size.width;

UIImageView *ImageView = [[UIImageView alloc] initWithFrame:CGRectMake(xOrigin, 0, self.view.frame.size.width, self.view.frame.size.height-44)];
[ImageView setImage:[images objectAtIndex:i]];

[ScrollView addSubview:ImageView];
}
ScrollView.contentSize = CGSizeMake(self.view.frame.size.width * numberOfViews, self.view.frame.size.height);
[self.view addSubview:ScrollView];
4

2 に答える 2

0

インデックス 0..200 で images 配列にアクセスしているように見えますが、3 つの要素しか含まれていません。を設定numberOfViews = 3;するか、次のように配列にインデックスを付けます。

ImageView.image = images[i%3];

モジュロ インデックスを使用すると、3 つの画像のそれぞれを繰り返しシーケンスに追加し、多数の scrollView サブビューでテストできます。あなたのクラッシュは、超巨大なものでない限り、200 枚の画像しかないメモリに関するものではないと思います。

于 2013-02-10T17:28:21.083 に答える
0

画像を表示するには、テーブル ビューを使用する必要があります。これらすべての画像の配列を作成することは望ましくありません。これは、これらすべての画像をメモリに格納するためです。これは良いことではありません。名前を保持するために配列を作成する必要さえありません。整数から簡単に作成できる名前があるためです (これは、tableView:cellForRowAtIndexPath: メソッドの indexPath.row から取得できます)。このようなもの:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 200;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    NSString *imageName = [NSString stringWithFormat:@"Image-%.3d.jpg",indexPath.row +1];
    UIImage *image = [UIImage imageNamed:imageName];
    cell.imageView.image = image;
    return cell;
}

この例では、セルのデフォルトの imageView を使用して画像を表示していますが、これは非常に小さいものです。より大きな画像ビューを含むカスタム セルを作成することをお勧めします (または、1 行に複数の画像が必要な場合は、いくつかの画像を並べて表示します)。

于 2013-02-10T18:04:38.197 に答える