Tag: viewdidlayoutsubviews

如何在viewDidLayoutSubviews中获得正确的视图高度?

– (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; NSLog(@"viewDidLayoutSubviews view.height: %f", self.view.frame.size.height); } 在上面, view.height 总是 1024,不pipe设备在哪个方向。即使旋转设备也会导致viewDidLayoutSubviews被调用,并且仍然会输出1024。 然而,这个观点很好。 我错过了什么?

iOS设备快速旋转180°会导致相机颠倒

我已经实现了下面的代码来改变基于AVCaptureVideoSession的方向: – (AVCaptureVideoOrientation)interfaceOrientationToVideoOrientation:(UIInterfaceOrientation)orientation { switch (orientation) { case UIInterfaceOrientationPortrait: return AVCaptureVideoOrientationPortrait; case UIInterfaceOrientationPortraitUpsideDown: return AVCaptureVideoOrientationPortraitUpsideDown; case UIInterfaceOrientationLandscapeLeft: return AVCaptureVideoOrientationLandscapeLeft; case UIInterfaceOrientationLandscapeRight: return AVCaptureVideoOrientationLandscapeRight; default: break; } NSLog(@"Warning – Didn't recognise interface orientation (%ld)",(long)orientation); return AVCaptureVideoOrientationPortrait; } 这个代码几乎完美的工作。 但是,发生的一个问题是,如果您快速旋转iOS设备180度,相机将显示颠倒。 以下是相机视图在旋转之前的样子: 轮换之后的样子如下所示: 另外,这里是我的viewDidLayoutSubviews实现: – (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; previewLayer.frame = self.view.bounds; self.view.translatesAutoresizingMaskIntoConstraints = NO; previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; […]

UIView / CALayer:在superview中转换触发器layoutSubviews

当改变UIView的一些属性时,它触发layoutSubviews中的layoutSubviews 。 在文档中找不到关于此的任何声明。 这些属性在superview和self中触发布局 帧 界限 这些属性仅在超视图中触发布局 转变 layer.transform 这些属性只触发自我布局 没有 这些属性不会触发任何布局 中央 layer.anchorPoint layer.position α 我觉得转换触发布局非常混乱,而且这个位置和anchorPoint不会。 示例代码 : https : //github.com/hfossli/LayoutSubviewsInconsistency 我想知道: 为什么我看到这种行为 如果这真的是不一致的,或者如果我误解了一些核心概念 每次我改变变形时如何避免superview到layoutSubviews 在文档和头文件中我找不到任何关于此的信息。 使用UIDynamics或类似的问题是显着的。