1

フルスクリーンのUIScrollViewを備えたアプリケーションがあり、その中に7つの画像があります。画像も全画面表示で、スクロールビューはページネーションを有効にするように設定されています。

画像ビューを作成または移動する方法があります。

-(void)rebuildImageView{

    // set up images
    float screenW = self.view.bounds.size.width;
    float screenH = self.view.bounds.size.height;
    int numImgs = self.soundNames.count;

    self.mainScrollView.contentSize = CGSizeMake(screenW * numImgs, screenH);
    for(int i=0; i<numImgs; i++){

        UIImageView* imageView = (UIImageView*)[self.mainScrollView viewWithTag:i+100];
        if(imageView == nil){
            imageView = [[UIImageView alloc] init];
            imageView.tag = i+100;
            [self.mainScrollView addSubview:imageView];
            imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"image%d.jpg",i]];
            imageView.contentMode = UIViewContentModeScaleAspectFill;
            imageView.clipsToBounds = YES;
            [imageView release];
        }
        imageView.frame = CGRectMake(i * screenW, 0, screenW, screenH);
    }

    // scroll to the current one
    [self.mainScrollView scrollRectToVisible:CGRectMake(self.currentSound*screenW, 0, screenW, screenH) animated:YES];
}

私はこれをViewControllerにも持っています:

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
    [UIView animateWithDuration:duration animations:^{
        [self rebuildImageView];
    }];
}

このコードは、画像0が表示されているときに自動回転すると正常に機能しますが、画像7を表示しているときは、回転すると画像6のほとんどが簡単に表示されます。このビデオは何が起こっているかを示しています:

http://www.youtube.com/watch?v=1O3jOcTgVP8

デバイスを回転させるときにスクロールビューと画像を再構成するために使用する必要があるより良い方法はありますか?

4

1 に答える 1

1

willAnimateRotationToInterfaceOrientation:durationメソッドに加えられたフレームの変更は、自動的にアニメーション化されます。それで、あなたはそれをブロックから取り除くことを試みることができますか?

UIScrollView個人的には、このタイプのサブクラス化と、同等のレイアウトサブビューフレームコードをメソッドのオーバーライドに配置することで、より多くの幸運がありましたlayoutSubviews(superを呼び出すことを忘れないでください。そうしないと、スクロールバーの位置が間違ってしまう可能性があります)。

于 2012-11-18T19:38:29.497 に答える