在iOS 7上如何淡化BOTH状态栏和导航栏LIKE Photos.app

时间:2013-11-12 01:33:14

标签: ios7 hidden statusbar navigationbar

基本上,这是一个非常简单的需求,但我已经尝试了几种方法,但它们都没有按预期工作。最接近功能的代码段是:

#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中,但这只是让导航栏永远可见。我相信这不是一个奇怪的需求,所以我敢打赌,有更好,更简单的解决方案。有什么想法吗?

0 个答案:

没有答案