OK, więc udało mi się to rozwiązać. Należy zwrócić uwagę na to, że klasa UIImagePickerController obsługuje tryb portretowy tylko zgodnie z Apple documentation.
Aby uchwycić obrót, tutaj willRotateToInterfaceOrientation
jest bezużyteczny, więc musisz użyć notyfikacji. Także ustawianie ograniczeń autolayout w środowisku wykonawczym nie jest drogą do zrobienia.
W AppDelegate didFinishLaunchingWithOptions
trzeba włączonych powiadomieniach obrotów:
// send notification on rotation
[[UIDevice currentDevice]beginGeneratingDeviceOrientationNotifications];
W viewDidLoad
sposobie cameraOverlayView UIViewController
dodać następujące:
//add observer for the rotation notification
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
koniec dodać metodę orientationChanged:
do cameraOverlay UIViewController
- (void)orientationChanged:(NSNotification *)notification
{
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
double rotation = 0;
switch (orientation) {
case UIDeviceOrientationPortrait:
rotation = 0;
break;
case UIDeviceOrientationPortraitUpsideDown:
rotation = M_PI;
break;
case UIDeviceOrientationLandscapeLeft:
rotation = M_PI_2;
break;
case UIDeviceOrientationLandscapeRight:
rotation = -M_PI_2;
break;
case UIDeviceOrientationFaceDown:
case UIDeviceOrientationFaceUp:
case UIDeviceOrientationUnknown:
default:
return;
}
CGAffineTransform transform = CGAffineTransformMakeRotation(rotation);
[UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
self.btnCancel.transform = transform;
self.btnSnap.transform = transform;
}completion:nil];
}
Powyższy kod stosuje transformację obrotową na 2 UBuzjach, których używam w tym przypadku btnCancel i btnSnap. Daje to efekt Aparatu podczas obracania urządzenia. Nadal dostaję Ostrzeżenie w konsoli <Error>: CGAffineTransformInvert: singular matrix.
nie wiem, dlaczego tak się dzieje, ale ma to coś wspólnego z widokiem z kamery.
Mam nadzieję, że powyższe pomaga.
zadał to samo pytanie jakiś czas temu - http://stackoverflow.com/questions/15377120/uiimagepickercontroller-record-video-with-landscape-orientation niestety nadal nie ma dobrej odpowiedzi. –
No cóż, mam problemy z więzami Autolayout w xcode, ale są one wyraźnie charakterystyczne dla zakotwiczenia elementów do bieżącego dna orientacji, a nie oryginalnego dna portretu. Moją kolejną próbą będzie próba ustawienia ograniczeń w czasie wykonywania za pomocą '- (void) willRotateToInterfaceOrientation: (UIInterfaceOrientation) na InterInterOrientation duration: (NSTimeInterval) duration" Czy masz jakieś sugestie przez @Aarona? – pechar