iPhone을 회전시킬 때 레이어를 조정해야하지만, 세로에서 가로로 또는 그 반대로 회전하는 경우에만 조정해야합니다. landscapeLeft가 180도에서 landscapeRight로, 180도에서 portraitUpsideDown으로 회전하면 아무 것도 할 필요가 없습니다. self.interfaceOrientation
이미있다,라고 때문에 시간 willAnimate
에 의해,UIViewController는 fromInterfaceOrientation 정보를 어디에 보관합니까?
- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
BOOL bFromPortrait = UIInterfaceOrientationIsPortrait(self.interfaceOrientation);
BOOL bToPortrait = UIInterfaceOrientationIsPortrait(interfaceOrientation);
if (bFromPortrait != bToPortrait)
// make adjustments
}
이 작동하지 않습니다
그래서 불필요한 동작을 방지하기 위해, 나는 (self
뷰 컨트롤러)이 같은 테스트를 실행 bFromPortrait와 bToPortrait는 항상 같고 조정은 결코 일어나지 않습니다.
willRotate
에서이 코드를 실행 해 보았습니다. "interfaceOrientation 속성에는 여전히 뷰의 원래 방향이 포함되어 있습니다."하지만 그 시점에서 레이어의 호스트 뷰의 자동 크기 조정이 수행되지 않았으므로 변경할 방법이 없습니다. 목표 조정을 위해 자동으로 크기가 조정 된 프레임에 액세스하십시오. 그렇지 않으면 조정할 수 없습니다.
willRotate
에서 설정, 아이폰에서 오는 한 방향을 추적하기 위해 부울 특성
bFromPortrait
을 추가하고,
willAnimate
에 액세스 (이 작품) :
- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
self.bFromPortrait = UIInterfaceOrientationIsPortrait(self.interfaceOrientation);
}
- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
BOOL bToPortrait = UIInterfaceOrientationIsPortrait(toInterfaceOrientation);
if (self.bFromPortrait != bToPortrait)
// Make adjustments.
}
그러나 나는주의 didRotateFromInterfaceOrientation
을 오버 클로킹하면 그 fromInterfaceOrientation
arg는 정확하게 이후에 이라고 불리는데도, 아이폰의 출처를 정확하게 반영했다. 여분의 부울 속성 bFromPortrait
이 필요하지 않아야합니다. UIViewController 이미이 정보를 추적하고있다 -하지만 어디서? 어떻게 접근합니까? 으로 조정할 필요가 있습니다.이 방법은 애니메이션 이후에 실행되므로 조정 사항이 사라집니다. 애니메이션에 조정 사항을 포함하려면 문제가 발생해야합니다. willAnimate
) 당신은 끝날이 조금 :)
나는 비슷한 문제를 가지고 생각을 할 수
글쎄, 90도에서 180도까지의 회전을 구별하는 방법에 대한 문제를 정확히 해결하지 못했지만, 코드가 CGSize 속성을 유지하는 또 다른 방법을 제안합니다. 새로운 너비와 높이는 캐시 된 크기와 90도 회전에서만 다릅니다. 세로 대 가로는 너비/높이 비율에 따라 결정될 수 있습니다. 하지만 부울은 더 간단하다고 생각합니다. – Wienke
@Wienke cool. 어떻게이 문제를 결국 해결할 수 있습니까? – haroldcampbell
문제를 두 번째 코드 예제에서 해결할 수있는 주요 문제는 해결됩니다. 제가 궁금해하던 작은 문제는 그 해결 방법이 전혀 필요하지 않은 이유였습니다. 정보는 이미 UIViewController에서 보유하고 있으므로 직접 액세스 할 수 있으면 좋을 것입니다. – Wienke