2

基本的には非常に単純な要求ですが、いくつかの方法を試しましたが、どれも期待どおりに機能しません。最も近い機能スニペットは次のとおりです。

#import "ViewController.h"

@implementation ViewController

- (void)dealloc
{
    [scrollView release];
    scrollView = nil;

    [super dealloc];
}

- (id)init
{
    if (self = [super init])
    {
        self.title = @"Pictures";

        scrollView = [[UIScrollView alloc] init];
        scrollView.delegate = self;
        scrollView.frame = CGRectMake(0.0f, 0.0f, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);
        scrollView.contentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width * 10, scrollView.bounds.size.height);
        scrollView.showsVerticalScrollIndicator = NO;
        scrollView.showsHorizontalScrollIndicator = NO;
        scrollView.pagingEnabled = YES;
        scrollView.userInteractionEnabled = YES;
        scrollView.backgroundColor = [UIColor blackColor];
        self.wantsFullScreenLayout = YES;
        self.automaticallyAdjustsScrollViewInsets = NO;
        isHidden = NO;
    }
    return self;
}

- (void)viewDidLoad
{
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
    [scrollView addGestureRecognizer:tapGesture];
    [tapGesture setNumberOfTapsRequired:1];
    [tapGesture release];

    for (int i = 0; i < 10; i++)
    {
        UIImage *image = [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"/path/to/%d.png", i + 1]];
        UIImageView *imageView= [[UIImageView alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width * i, 0.0f, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
        imageView.contentMode = UIViewContentModeScaleAspectFit;
        imageView.image = image;
        [scrollView addSubview:imageView];
        [image release];
        [imageView release];
    }

    [self.view addSubview:scrollView];
}

- (void)tap:(UITapGestureRecognizer *)gesture
{
    [UINavigationBar setAnimationDuration:1.0];
    [UINavigationBar beginAnimations:@"HideTopBars" context:nil];

    isHidden = !isHidden;
    // [self setNeedsStatusBarAppearanceUpdate];

    self.navigationController.navigationBar.alpha = isHidden ? 0.0f : 1.0f;
    [UINavigationBar commitAnimations];
}

- (void)scrollViewDidScroll:(UIScrollView *)view
{
    // further operation
}

- (BOOL)prefersStatusBarHidden
{
    return isHidden;
}
@end

「[self setNeedsStatusBarAppearanceUpdate]」がないと、ナビゲーション バーは期待どおりにフェードしますが、ステータス バーのテキストは表示されたままになります。「[self setNeedsStatusBarAppearanceUpdate]」では、テキストもフェードしますが、ナビゲーションバーのアニメーションがフェード効果とともに画面上部からスライドイン/アウトします。また、「[self setNeedsStatusBarAppearanceUpdate]」をprefersStatusBarHiddenに移動しようとしましたが、ナビゲーションバーが永久に表示されました。これは特別な要求ではないと思うので、もっと簡単で優れた解決策があるはずです。何か案が?

4

0 に答える 0