1

Xcode 4.5.2を使用してビューに多くの画像をロードする必要があるアプリを開発しています

そのため、上部に がありUIView、この内部に多くの画像を表示するUIView必要があり、これを pagingEnabled モードで使用しています。読み込む画像がたくさんあるので、一度に読み込むことができないことはわかっています。そのため、必要に応じて追加または削除することにしました。UIScrollViewUIScrollView

アプリの起動時に に 3 つの画像をロードしましUIScrollViewた。ユーザーが画像 2 に移動すると、 から画像 0 を削除したいと思います。画像 0UIScrollViewを削除しようとすると、完全に白い画面が表示されます。画像 0 を削除しようとしないでください。ユーザーが画像 3 に移動すると、新しい画像 (画像 4) を にロードし、画像 1UIScrollViewを削除します。これまでのところ、これを行うことができます。基本的に、私のアプリは問題なく動作しますが、最初の (インデックス 0の) 画像を削除したい場合、画面に完全に白い画面が表示されます。

なぜ私がこの振る舞いをしているのか分かりますか? 警告もエラーもありませんでした。画像 0 ではなく、他のすべての画像を削除できる可能性はありますか?

ありがとうございました。

     -(void)scrollViewDidScroll:(UIScrollView *)scrollView
{ 
static NSInteger currentPage = 0 ;
CGFloat pageWidth = self.scrollView.frame.size.width ;
float fractionalPage = self.scrollView.contentOffset.x / pageWidth ;
NSLog(@"%f",fractionalPage);
if(fractionalPage == currentPage+1)
{
    NSLog(@"Swipe Left");
    currentPage++;
    NSLog(@"Current page :%d",currentPage);

    [self setLayoutImages:kLeft] ;
}
else if(fractionalPage+1 ==currentPage)
{
    NSLog(@"Swipe Right");
    currentPage--;
    NSLog(@"Current page :%d",currentPage);
    [self setLayoutImages:kRight];
}

}

-(void)setLayoutImages:(Direction )direction
{
int currentPage = self.scrollView.contentOffset.x / scrollViewWidth ;
if(direction == kLeft)
{
    self.scrollView.contentSize = CGSizeMake(((currentPage+2) * scrollViewWidth), 350.0f);
    if(![self.scrollView viewWithTag:currentPage+1])
    {
        NSString *imageName = @"iPhone.png" ;
        UIImage *image = [UIImage imageNamed:imageName];
        UIImageView *imageView = [[UIImageView alloc]initWithImage:image ] ;
        imageView.tag  = currentPage+1 ;
        CGRect frame = imageView.frame ;
        frame.size.height = imageHeight;
        frame.size.width = scrollViewWidth ;
        frame.origin.x = (currentPage+1) * scrollViewWidth ;
        frame.origin.y = 0 ;
        imageView.frame = frame ;
        if (currentPage>2) { //To be able to remove the first image,i need to add equal here,but i got white screen.
            [[self.scrollView viewWithTag:(currentPage -2)]removeFromSuperview ] ;            }
        [self.scrollView addSubview:imageView ] ;
    }
}
else if(direction == kRight)
{
    if(![self.scrollView viewWithTag:currentPage-1] && currentPage >0)
    {
        NSString *imageName = @"gs.jpeg";
        UIImage *image = [UIImage imageNamed:imageName];
        UIImageView *imageView = [[UIImageView alloc]initWithImage:image ];
        imageView.tag = currentPage-1 ;
        CGRect frame = imageView.frame ;
        frame.size.height = imageHeight ;
        frame.size.width = scrollViewWidth ;
        frame.origin.x = (currentPage-1)*scrollViewWidth ;
        frame.origin.y = 0 ;
        imageView.frame = frame ;
        [[self.scrollView viewWithTag:currentPage+2]removeFromSuperview ] ;
        [self.scrollView addSubview:imageView ];
    }
}

}

4

2 に答える 2

0

3つの deferant のそれぞれを与えてTag再利用するか、 iCarouselという既製の[[view viewWithtag:tag] removeFromSuperView]プロジェクトを試してみることができます。それは素晴らしいプロジェクトです。nicklockwood

horizontal それはすることができますvertical

ここに画像の説明を入力

于 2012-12-10T22:13:39.710 に答える
0

私の記憶が正しければ、タグなしビューのデフォルトは 0 であるため、ビューを 0 ではなく 1 のタグで開始してみてください。これが問題を引き起こしている可能性があります。

于 2012-12-11T06:36:28.487 に答える