0

세로 모드와 가로 모드를 모두 지원하는 간단한 앱을 개발 중입니다. 비디오보기라는 제약 조건이 설정되어 있고 인터페이스 방향이 변경 될 때 제대로 크기가 조절되는보기 UIView이 있습니다. 해당 뷰의 맨 위에는 사용자 정의 레이어가 추가되었습니다. 해당 레이어는보기의 프레임을 따라야하므로 인터페이스 방향이 변경되면 변경해야합니다.인터페이스 방향이 변경되면 레이어 크기를 조정할 수 있습니까?

문제는 레이어에 제약이 없습니다. 나는 이런 식으로했습니다 :

- (void) viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 
    _previewLayer.frame = CGRectMake(0, 0, self.videoView.frame.size.width, self.videoView.frame.size.height); 
} 

레이어를 적절하게 크기를 조정하지만 잘 보이지 않습니다. 첫 번째 videoView의 크기가 조정 된 다음 일부 지연 레이어의 크기가 조정 된 후 나는 그것이 하나의 순조로운 전환이되기를 바랍니다. 내가 어떻게이 일을 할 수 있니?

답변

1
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { 
if UIDevice.currentDevice().orientation.isLandscape.boolValue { 
    print("Landscape") 
} else { 
    print("Portrait") 
} 

이 당신을 말할 것이다. 여기에서 코드를 실행할 수 있습니다.

+0

물론 어떤 레이어를 크기를 조정해야하는지 어떻게 알 수 있습니까? – MegaManX

+0

레이어를 화면 크기로 설정 하시겠습니까? 제발 좀 더 정보. –

+0

레이어가 videoView 위에 추가되었습니다. 인터페이스 방향이 변경되면 videoView의 크기가 조정됩니다. 레이어는 그 크기를 모방하고 그 크기로 크기를 조정해야합니다. – MegaManX

0

setNeedsLayout을 사용하거나 다시 layoutIfNeeded을 사용하여보기 레이아웃을 다시 업데이트하려고 시도 했습니까? 하위 뷰를 배치 할 때 프레임을 바로 바꿀 수 있으므로 변경 사항을 적용하기 위해 다음 업데이트주기에서 대기하게됩니다.

더 좋은 방법은 viewWillLayoutSubviews에 프레임을 적용하는 것입니다. 장치가 일어나기 전에 회전하려고한다면

행운을 빌어 요, 시스코

+0

viewWillLayoutSubviews가 표시되었지만 아무런 효과가 없다고 언급하는 것을 잊었습니다. – MegaManX