Gyf*_*fis 36 iphone objective-c statusbar ios ios7
我面临的问题是:
我想实现一个具有漂亮设计和左/右菜单的iOS 7应用程序,它在主视图自动向右/向左显示.我正在使用[UIView animateWithDuration...]代码执行此操作,但这并不重要.我想要实现的是与邮箱iOS 7应用程序相同的效果:使用主视图移动状态栏(向右/向左)
图片有更好的解释:

我才发现是这个文章对这个问题,使用私人API的,我想没有用,因为我想我的应用程序在App Store接受其中的一些工作代码.
我想达到同样的效果('合法').有谁知道怎么做?
谢谢!
Sim*_*oyd 48
它的要点是使用iOS 7中引入的这种方法:
https://developer.apple.com/documentation/uikit/uiscreen/1617814-snapshotview:
有了它你会得到一个UIView包含一个包含状态栏的屏幕截图.一旦你拥有了它,只需隐藏你当前的视图然后推动截屏视图.
我在这里发布了一个概念证明:https: //github.com/simonholroyd/StatusBarTest
注意我还没有提交通过Apple审核流程执行此操作的代码,但这不是私有API方法.
因此,在Simon Holroyd先生的初步推动和一些搜索之后,我找到了如何实现这种"效果"功能的解决方案.这是代码:
statusbarView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 20)];
Run Code Online (Sandbox Code Playgroud)
编辑:pcholberg先生正确地指出前代码在实际设备上不起作用,只在iOS模拟器上,所以我按照他的推荐编辑了它
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
UIView *screenShot = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:NO];
[statusbarView addSubview:screenShot];
[statusbarView setClipsToBounds:YES];
[self.view addSubview:statusbarView];
[self setPrefersStatusBarHidden:YES];
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
Run Code Online (Sandbox Code Playgroud)
...
- (BOOL)prefersStatusBarHidden
{
return prefersStatusBarHidden;
}
Run Code Online (Sandbox Code Playgroud)
...
因此,第一部分创建上下文,使用Simon提到的方法,使用状态栏绘制视图,并将其保存为 UIImage
第二部分将快照添加UIView到我的viewController中UIView
第三部分将状态栏的bool设置为YES(以便在上面的方法中更容易使用),并调用方法重绘它
然后,将UIView设置为其位置的非功能状态栏并隐藏原始状态栏,因此不存在双重渲染.然后我可以在我的[UIView animateWithDuration...方法中使用此视图
当我返回时,我在动画块的完成处理程序中使用此代码:
[statusbarView removeFromSuperview];
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
[self setPrefersStatusBarHidden:NO];
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
Run Code Online (Sandbox Code Playgroud)
瞧!这在我的问题中起到了描述效果的作用.
希望这有助于某人!
我使用这种方法移动带有滑块视图的雕像栏,在应用程序中有两个窗口,一个普通窗口,另一个statuBarWindow,我得到statuBarView,superView是statuBarWindows,并用滑块视图移动它.
- (UIView *)statuBarView
{
NSString *key = [[NSString alloc] initWithData:[NSData dataWithBytes:(unsigned char []){0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x61, 0x72} length:9] encoding:NSASCIIStringEncoding];
id object = [UIApplication sharedApplication];
UIView *statusBar = nil;
if ([object respondsToSelector:NSSelectorFromString(key)]) {
statusBar = [object valueForKey:key];
}
return statusBar;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14547 次 |
| 最近记录: |