我有一个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)
但这显然是一个黑客,必须有一个更好的方法.
我试过的其他事情:
我试着[super viewWillAppear]在隐藏状态栏之后调用,即在我的方法结束时.
我在navigationController.view上尝试了setNeedsLayout,如下所示:
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
[self.navigationController.view setNeedsLayout];
Run Code Online (Sandbox Code Playgroud)但这似乎不起作用.
任何帮助赞赏.谢谢
我正在使用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) 我有一个带有2个音轨和一个视频轨的AVMutableComposition.我正在使用该合成来从.mov文件中串起大约40个不同的视频片段,将每个片段的视频内容放入我的合成视频轨道和音频轨道中的音频.我用于音乐的第二个音轨.我还有一个标题图形的同步图层.
当我使用AVPlayer播放此合成时,音频慢慢变得不同步.大约需要4分钟才能开始变得明显.看起来如果我只将一小撮较长的剪辑串在一起,问题就不那么明显了,那就是当有很多剪辑较短的剪辑(在我的测试中约为40)时,它变得非常糟糕.
暂停和播放不会重新同步音频,无论如何寻求.换句话说,如果我让视频播放到最后,即使我在整个过程中暂停和播放,唇音同步也会明显关闭,但是,如果我寻找一段时间,音频会重新同步.
我现在的hacky解决方案是每分钟左右寻找当前时间+ 1帧.由于搜索操作的延迟,这会在视频中产生令人不快的跳跃,因此不是一个好的解决方案.
使用ExportSession导出不会出现此问题,音频在输出影片中保持同步.
我想知道AVPlayer中的新masterClock属性是否是这个的答案,如果是,它是如何使用的?
我正在收听UIDeviceOrientationDidChangeNotification,以便根据设备的方向调整我的UI.
问题是我从通知中获得的设备方向似乎不准确.如果我从纵向和垂直方向开始使用手机(就像用它拍照一样),我从通知中获得的方向是正确的.随着手机的倾斜度接近水平(如平放在桌面上),方向切换到横向.这种情况发生在电话实际上在桌子上平放之前.这根本就没有将手机转向风景.就好像它偏爱景观一样.
使用其他应用程序(如邮件)时,我看不到同样的行为.一旦确定你已经进入新的方向,邮件似乎只会切换方向.
任何帮助非常感谢.
谢谢,