Я обновил свой iPhone и SDK до iOS 4.0.1, и теперь мое приложение работает не так, как в iOS 3.x.
Мое приложение использует UIImagePickerController с настраиваемым cameraOverlayView (который я опущу в этом посте). Главное, что мне нужно видеть камеру iphone в полноэкранном режиме. Чтобы перейти непосредственно к проблеме, я добавлю код и снимки экрана, чтобы объяснить, что происходит.
Я создал приложение на основе вида, используя проекты шаблонов XCode с именем «CameraTransform», поэтому получил два класса: CameraTransformAppDelegate
и CameraTransformViewController
, хорошо! В методе CameraTransformViewController
s viewDidAppear
я поместил следующий код:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
UIImagePickerController* picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.delegate = self;
//[self configurePicker_FirstAttempt:picker]; Use this!
//[self configurePicker_SecondAttempt:picker]; Use this too!
[self presentModalViewController:picker animated:YES];
}
- (void)configurePicker_FirstAttempt:(UIImagePickerController*) picker {
picker.showsCameraControls = NO;
picker.navigationBarHidden = YES;
// not needed (use defaults)
//picker.toolbarHidden = YES;
//picker.wantsFullScreenLayout = YES;
}
- (void)configurePicker_SecondAttempt:(UIImagePickerController*) picker {
// Transform values for full screen support
CGFloat cameraTransformX = 1.0;
CGFloat cameraTransformY = 1.12412;
picker.cameraViewTransform = CGAffineTransformScale(picker.cameraViewTransform, cameraTransformX, cameraTransformY);
}
Запуск проекта с / я получил:
Примечание:
- В iOS 3.x я использовал третий подход (оба метода без комментариев) для настройки средства выбора, которое отображалось в полноэкранном режиме без «черной полосы» внизу.
- Я проверил исходное значение
picker.cameraViewTransform
(до масштабирования), и для него установлено значение Идентичность (как и ожидалось).
-
picker.view.frame
установлен на границы экрана (0.0, 0.0, 320.0, 480.0)
- Я попытался объединить перевод в
picker.cameraViewTransform
(после масштабирования), например так: CGAffineTransformTranslate(picker.cameraViewTransform, 0.0, 20.0);
, и я понял, что была какая-то часть "вида с камеры", которая была скрыта (возможно, это не было источником 0.0, 0.0), так что я получил больше «вида с камеры» на экране.
Похоже, что в новом SDK UIImagePickerController каким-то образом изменился, возможно, элементы управления камерой имеют разные размеры или что-то похожее.
У кого-нибудь была такая проблема?