小编Taz*_*Taz的帖子

UIViewController更喜欢StatusBarHidden无法正常工作

我正在尝试隐藏其中一个视图控制器的状态栏(以模态方式显示).当我呈现视图控制器时,状态栏将被隐藏,然后在被解雇时返回.

我已将以下代码添加到显示的视图控制器中

- (BOOL)prefersStatusBarHidden
{
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

我还将Info.plist文件中的键设置为以下内容:

<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>
Run Code Online (Sandbox Code Playgroud)

根据我的理解,这应该是完成这项工作所需的全部内容.

我还使用自定义动画控制器来执行符合UIViewControllerAnimatedTransitioning协议的演示.在animateTransition:实现中,我尝试手动调用prefersStatusBarHidden,然后setNeedsStatusBarAppearanceUpdate确保正在进行调用,但状态栏仍然存在.

任何想法为什么会发生这种情况将不胜感激.我已经搜索过StackOverflow,但似乎没有人遇到过这个问题,所有接受的答案都提到了调用setNeedsStatusBarAppearanceUpdate,我已经在做了.

编辑 - 现在下面的代码似乎按照需要工作

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext
{
    if (self.isPresenting) {
        UIView *containerView = [transitionContext containerView];

        UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
        UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

        toViewController.view.frame = containerView.frame;

        [containerView addSubview:toViewController.view];

        // Ask the presented controller whether to display the status bar
        [toViewController setNeedsStatusBarAppearanceUpdate];

        [UIView animateWithDuration:1.0f delay:0.0f options:UIViewAnimationOptionCurveEaseIn animations:^{
            toViewController.view.alpha = 1.0f;
            fromViewController.view.alpha = 0.0f;
        } …
Run Code Online (Sandbox Code Playgroud)

objective-c uiviewcontroller ios ios7 ios7-statusbar

43
推荐指数
2
解决办法
4万
查看次数

在显示模态控制器的同时与呈现控制器进行交互

是否可以在呈现模型视图控制器的同时与呈现视图控制器进行交互?

 ------------
|            |
|    VC1     |
|            |
|            |
|            |
|            |
|------------|
|    VC2     |
|            |
 ------------
Run Code Online (Sandbox Code Playgroud)

在上图中,VC1 是presentingViewController,VC2 是presentedViewController。我试图实现的用户体验是用户可以与 VC1 和 VC2 进行交互。目前,当呈现 VC2 时,触摸不会传递到 VC1。

objective-c uiviewcontroller modalviewcontroller presentmodalviewcontroller ios

5
推荐指数
1
解决办法
649
查看次数

可以使用NSURLProtocol的子类播放视频,使用MPMovieController还是AVFoundation?

我目前正在尝试将视频播放到具有自定义NSURLProtocol子类中定义的自定义方案的URL.最初我使用MPMoviePlayerController试图完成此任务,但在遇到问题并检查堆栈溢出后,我发现MPMoviePlayerController没有按预期处理NSURLProtocol子类.

如何使用自定义NSURLProtocol使用URL播放电影?

因此,我决定查看AVFoundation框架,但是,似乎这似乎也不起作用.我只是想知道这是否可行,还是我想穿过墙壁?

使用AVFoundation,我正在使用的方法如下所示.值得一提的是,当使用标准URL来访问互联网上托管的视频时,这种方法很有效,但不适用于自定义NSURLProtocol.

// this doesn't work
//AVPlayer *player = [[AVPlayer alloc] initWithURL:[NSURL urlWithString:@"custom URL scheme"]];
// this works
AVPlayer *player = [[AVPlayer alloc] initWithURL:[NSURL urlWithString:@"some url to video on remote server"]];

AVPlayerLayer *layer = [AVAVPlayerLayer playerLayerWithPlayer:player];
// configure the layer
[self.view.layer addSublayer:layer];

[player play];
Run Code Online (Sandbox Code Playgroud)

为了从定义的NSURLProtocol子类中播放,是否需要做一些不同的事情?

mpmovieplayercontroller avfoundation nsurlprotocol ios avplayer

4
推荐指数
1
解决办法
4097
查看次数

Xcode 单元测试中奇怪的保留周期警告

我有一项服务,我目前正在为其编写单元测试。代码按预期工作,但我收到一个奇怪的保留周期警告。

[self.myService doSomethingCoolWithCompletionBlock:^(MyResponseObject *obj) {
    XCTAssertNil(obj, @"obj should be nil");
}];
Run Code Online (Sandbox Code Playgroud)

XCTAssertNil(obj, @"obj should be nil");行在 Xcode 中显示警告Capturing 'self' strongly in this block is likely to lead to a retain cycle

如果我将代码更改为以下内容,则会删除警告:

__weak MyService *weakService = self.myService;
[weakService doSomethingCoolWithCompletionBlock:^(MyResponseObject *obj) {
    XCTAssertNil(obj, @"obj should be nil");
}];
Run Code Online (Sandbox Code Playgroud)

我正在self.someService其他单元测试中使用,从未遇到过这个问题。有没有人经历过这种情况?

编辑

我有另一个测试,其中包含以下内容:

[self.myService doSomethingElseCoolWithCompletionBlock:(NSArray *results) {
    XCTestAssertNotNil(results, @"results should not be nil");
}];
Run Code Online (Sandbox Code Playgroud)

这不会给我警告。我看到的唯一区别是,这是检查数组,另一个是检查特定类型的对象。

xcode unit-testing objective-c ios

3
推荐指数
1
解决办法
1310
查看次数

强制iOS方向在一个模态视图控制器上横向移动

我有一个支持iPad和iPhone的通用应用程序。在iPad上,我支持所有方向;在iPhone上,我仅支持纵向。

我希望一个视图控制器(以模态显示)在iPhone上运行时能以设备所处的任何方向显示。我已经看到许多教程和SO帖子,建议使用-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window应用程序委托方法,这似乎可行关于旋转模态视图控制器绝对好。但是,当我在横向模式下关闭模式视图时,整个应用程序仍保持横向模式。

理想情况下,一旦取消模式视图,应用程序应回到纵向模式。

经过调查,似乎-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window在关闭视图控制器后未调用回调,而且我不知道为什么。

在这里玩过示例应用程序,并且在关闭视图控制器时触发了回调,但我不知道为什么。我可以看到的唯一区别是我的视图层次结构要复杂得多,并且我显示的是导航控制器,而不是显式的视图控制器,但是我看不到这将如何影响回调。

有什么解决方案的想法吗?

谢谢

iphone objective-c uiinterfaceorientation modalviewcontroller ios

0
推荐指数
1
解决办法
1958
查看次数