小编edd*_*ddy的帖子

当隐藏状态栏时,如何让UINavigationController中的导航栏更新其位置?

我有一个UINavigationController可见的导航栏.我有一个特别的UIViewController,我想在推入导航堆栈时隐藏状态栏.弹出这个viewController后,我想再次显示状态栏.

我在这个viewWillAppear方法中隐藏了这个栏UIViewController:

- (void) viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    [self.navigationController setWantsFullScreenLayout:YES];
    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];    
}
Run Code Online (Sandbox Code Playgroud)

请注意,setWantsFullScreenLayout:YES为了清楚起见,我在此处设置,但实际上我只是在Interface Builder中设置此属性.

问题: NavigationController的导航栏不会向上移动以占用现在隐藏状态栏的空间.

一个hacky解决方案 我发现唯一能够刷新导航栏位置的方法是隐藏它并再次显示它,如下所示:

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
[self.navigationController setNavigationBarHidden:YES animated:NO];
[self.navigationController setNavigationBarHidden:NO animated:NO];
Run Code Online (Sandbox Code Playgroud)

但这显然是一个黑客,必须有一个更好的方法.

我试过的其他事情:

  1. 我试着[super viewWillAppear]在隐藏状态栏之后调用,即在我的方法结束时.

  2. 我在navigationController.view上尝试了setNeedsLayout,如下所示:

    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];    
    [self.navigationController.view setNeedsLayout];
    
    Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.

任何帮助赞赏.谢谢

iphone

17
推荐指数
1
解决办法
1万
查看次数

如何正确清理AVCaptureSession和AVCaptureVideoPreviewLayer

我正在使用AVFoundation api来创建相机预览视图,我在完成后无法清理.

我发现这个问题的最佳答案是在这个SO线程中,谢谢Codo.

但是,他没有解决AVCaptureVideoPreviewLayer的重新分配问题,而这正是我遇到麻烦的地方.

在我的视图控制器类中,我在startCameraCapture方法中有一些初始化代码.听Codo的回答,我正在使用dispatch_set_finalizer_f(_captureQueue, capture_cleanup);注册队列真正关闭时调用的回调.我也保留自己,以确保在调用我的对象完成队列之前我的对象不会消失.然后我使用capture_cleanup回调来释放self.

-(void) startCameraCapture {
    _camSession = [[AVCaptureSession alloc] init];
    if (_previewLayer == nil) {
        _previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:_camSession];
    }
    _previewLayer.frame = self.compView.bgView.frame;   
    [self.compView.bgView.layer addSublayer:_previewLayer];

    // Get the default camera device
    AVCaptureDevice* camera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    // Create a AVCaptureInput with the camera device
    NSError *error=nil;
    AVCaptureInput* cameraInput = [[AVCaptureDeviceInput alloc] initWithDevice:camera error:&error];
    if (cameraInput == nil) {
        NSLog(@"Error to create camera capture:%@",error);

    }

    AVCaptureVideoDataOutput* videoOutput = [[[AVCaptureVideoDataOutput alloc] init] autorelease];

    // …
Run Code Online (Sandbox Code Playgroud)

ios4 ios

7
推荐指数
1
解决办法
6356
查看次数

使用AVPlayer音频播放AVMutableComposition不同步

我有一个带有2个音轨和一个视频轨的AVMutableComposition.我正在使用该合成来从.mov文件中串起大约40个不同的视频片段,将每个片段的视频内容放入我的合成视频轨道和音频轨道中的音频.我用于音乐的第二个音轨.我还有一个标题图形的同步图层.

当我使用AVPlayer播放此合成时,音频慢慢变得不同步.大约需要4分钟才能开始变得明显.看起来如果我只将一小撮较长的剪辑串在一起,问题就不那么明显了,那就是当有很多剪辑较短的剪辑(在我的测试中约为40)时,它变得非常糟糕.

暂停和播放不会重新同步音频,无论如何寻求.换句话说,如果我让视频播放到最后,即使我在整个过程中暂停和播放,唇音同步也会明显关闭,但是,如果我寻找一段时间,音频会重新同步.

我现在的hacky解决方案是每分钟左右寻找当前时间+ 1帧.由于搜索操作的延迟,这会在视频中产生令人不快的跳跃,因此不是一个好的解决方案.

使用ExportSession导出不会出现此问题,音频在输出影片中保持同步.

我想知道AVPlayer中的新masterClock属性是否是这个的答案,如果是,它是如何使用的?

avfoundation ios

7
推荐指数
1
解决办法
1455
查看次数

UIDeviceOrientationDidChangeNotification返回的设备方向不准确

我正在收听UIDeviceOrientationDidChangeNotification,以便根据设备的方向调整我的UI.

问题是我从通知中获得的设备方向似乎不准确.如果我从纵向和垂直方向开始使用手机(就像用它拍照一样),我从通知中获得的方向是正确的.随着手机的倾斜度接近水平(如平放在桌面上),方向切换到横向.这种情况发生在电话实际上在桌子上平放之前.这根本就没有将手机转向风景.就好像它偏爱景观一样.

使用其他应用程序(如邮件)时,我看不到同样的行为.一旦确定你已经进入新的方向,邮件似乎只会切换方向.

任何帮助非常感谢.

谢谢,

iphone

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

标签 统计

ios ×2

iphone ×2

avfoundation ×1

ios4 ×1