gpt4 book ai didi

ios - UIStatusBar 作为 Facebook 新的 iOS7 应用程序

转载 作者:可可西里 更新时间:2023-11-01 04:23:43 27 4
gpt4 key购买 nike

我有一个带有侧边栏菜单的应用程序,有点像 Facebook 侧边栏菜单。我正在使用这个名为 SWRevealViewController 的类,它运行良好。现在,自从 iOS7 发布以来,我就是想不出如何调整我的状态和导航栏,使其与 Facebook 应用程序中的一样。

如您所见,在 Facebook 应用程序中,当用户滑动屏幕并打开菜单时,状态栏从导航栏的蓝色变为黑色并带有淡入淡出动画。在我的应用程序中,用户滑动屏幕打开菜单,状态栏的蓝色(由于该 View NavigationBar 是蓝色的)不会消失并将颜色更改为黑色。

facebook app navigation bar

my app navigation bar

此外,我遇到的另一个问题是,我无法将 StatusBar 文本颜色更改为白色。我已经尝试了一切,互联网上的每一段代码,阅读了所有苹果的文档,但仍然无法改变颜色。

我也用过这段代码:

- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation {
return UIStatusBarAnimationFade;
}

- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}

- (BOOL)prefersStatusBarHidden
{
return NO;
}

提前致谢。

============================================= =========================

更新:@yoeriboven 回答中的这个问题的解决方案是将 2 个 View 放在 SWRevealViewController 的顶部,黑色和蓝色,然后只为这两个 View 设置动画,这是一个很好的解决方案,而且效果很好。

因此,在创建 revealController 时,我创建了 2 个空白的 UIView 并添加了它们,一蓝一黑。其中一个,黑色的,我暂时藏起来了。

self.revealController = [[SWRevealViewController alloc] initWithRearViewController:nil frontViewController:self.frontViewController];
self.revealController.delegate = self;

self.appDelegate.window.rootViewController = self.revealController;

self.statusBarBlack = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.appDelegate.window.frame.size.width, 20)];
[self.statusBarBlack setBackgroundColor:[UIColor blackColor]];

self.statusBarBlue = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.appDelegate.window.frame.size.width, 20)];
[self.statusBarBlue setBackgroundColor:[UIColor blueColor]];

[self.appDelegate.window.rootViewController.view addSubview:self.statusBarBlack];
[self.appDelegate.window.rootViewController.view addSubview:self.statusBarBlue];

现在,如果您正在使用 SWRevealViewController,您可以使用下一个代码,如果没有,只需在 SWRevealViewController.m 中自行构建它,只需 #import “AppDelegate.h” 然后用这个方法替换 touchesMoved 方法:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesMoved:touches withEvent:event];

if (self.state == UIGestureRecognizerStateFailed)
return;

// Change color of status bar by the location of your swipe
AppDelegate *appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
UITouch *currentTouch = [touches anyObject];
CGPoint currentTouchLocationOnWindow = [currentTouch locationInView:appDelegate.window];
appDelegate.splashScreen.blueStatusBar.alpha = currentTouchLocationOnWindow.x / appDelegate.window.frame.size.width;

if ( _dragging )
return;

const int kDirectionPanThreshold = 5;

UITouch *touch = [touches anyObject];
CGPoint nowPoint = [touch locationInView:self.view];

CGFloat moveX = nowPoint.x - _init.x;
CGFloat moveY = nowPoint.y - _init.y;

if (abs(moveX) > kDirectionPanThreshold)
{
if (_direction == SWDirectionPanGestureRecognizerHorizontal)
_dragging = YES;
else
self.state = UIGestureRecognizerStateFailed;
}
else if (abs(moveY) > kDirectionPanThreshold)
{
if (_direction == SWDirectionPanGestureRecognizerVertical)
_dragging = YES ;
else
self.state = UIGestureRecognizerStateFailed;
}
}

现在向下搜索方法 rightRevealToggleAnimated 并用这个替换她:

- (void)rightRevealToggleAnimated:(BOOL)animated
{
FrontViewPosition toogledFrontViewPosition = FrontViewPositionLeft;
if (_frontViewPosition >= FrontViewPositionLeft) {
toogledFrontViewPosition = FrontViewPositionLeftSide;
[UIView animateWithDuration:0.3 animations:^{
// Change color of status bar
AppDelegate *appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
appDelegate.splashScreen.blueStatusBar.alpha = 0.0;
}];
} else {
[UIView animateWithDuration:0.3 animations:^{
// Change color of status bar
AppDelegate *appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
appDelegate.splashScreen.blueStatusBar.alpha = 1.0;
}];
}

[self setFrontViewPosition:toogledFrontViewPosition animated:animated];
}

这应该可以解决问题,尽情享受吧!

最佳答案

在 iOS 7 中,您的 View Controller 的 View 是全屏的。因此,您可以将两个 View 放在 View 顶部 22 像素(状态栏高度)的顶部。底部一个黑色,顶部一个与导航栏颜色相同。当滑动到 SWRevealViewController 时,使用 UIScrollView 委托(delegate)方法之一,您可以计算它的百分比,并将该值应用于带有导航栏的 subview 的不透明度颜色。

关于ios - UIStatusBar 作为 Facebook 新的 iOS7 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19137428/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com