UIImagePickerController가 화면을 채우지 않습니다.
UIImagePickerController에 사용자 지정 오버레이를 추가하고 있으며보기 하단에 지속적인 검은 색 막대가 있습니다. 컨트롤러를 인스턴스화하는 코드는 다음과 같습니다.
- (UIImagePickerController *)imagePicker {
if (_imagePicker) {
return _imagePicker;
}
_imagePicker = [[UIImagePickerController alloc] init];
_imagePicker.delegate = self;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
_imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
_imagePicker.showsCameraControls = NO;
_imagePicker.wantsFullScreenLayout = YES;
_imagePicker.navigationBarHidden = YES;
_imagePicker.toolbarHidden = YES;
} else {
_imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
}
return _imagePicker;
}
반환 된 컨트롤러는 모달로 표시되며 카메라 컨트롤을 숨기지 않을 때 제대로 작동합니다 (예 : 전체 화면 표시).
Ole의 제안 덕분에이 코드로 작업했습니다.
// Resize the camera preview
_imagePicker.cameraViewTransform = CGAffineTransformMakeScale(1.0, 1.03);
높이가 3 % 증가해도 괜찮 았습니다. 화면 하단에 사용자 지정 도구 모음을 추가 할 때 더 이상 창 전체에 검은 색 막대가 표시되지 않습니다.
카메라의 화면 비율은 4 : 3이고 화면의 화면 비율은 3 : 2입니다. 따라서 3 : 2로 자르지 않는 한 카메라 사진이 화면을 채울 방법이 없습니다. 이를 위해 적절한 스케일 변환을 적용하십시오.
고정 값으로 크기를 조정하는 것은 좋은 생각이 아닙니다. 여기에서 받아 들인 대답을 사용한 사람은 아마도 iPhone 5가 나왔을 때 알 수 있었을 것입니다.
다음은 레터 박스를 제거하기 위해 화면 해상도에 따라 동적으로 크기를 조정하는 코드 스 니펫입니다.
// Device's screen size (ignoring rotation intentionally):
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
// iOS is going to calculate a size which constrains the 4:3 aspect ratio
// to the screen size. We're basically mimicking that here to determine
// what size the system will likely display the image at on screen.
// NOTE: screenSize.width may seem odd in this calculation - but, remember,
// the devices only take 4:3 images when they are oriented *sideways*.
float cameraAspectRatio = 4.0 / 3.0;
float imageWidth = floorf(screenSize.width * cameraAspectRatio);
float scale = ceilf((screenSize.height / imageWidth) * 10.0) / 10.0;
self.ipc.cameraViewTransform = CGAffineTransformMakeScale(scale, scale);
이봐 요, 어떤 사람들이 iPhone 5의 스케일을 계산 한 후에도 여전히 하단에 검은 색 막대가 표시되는 것을 보았습니다. 잠시 동안이 문제가 있었지만 화면 중앙에 있도록 뷰를 변환해야한다는 것을 알았습니다. 스케일을 적용합니다. 이 두 가지 작업을 수행하는 코드는 다음과 같습니다.
CGSize screenBounds = [UIScreen mainScreen].bounds.size;
CGFloat cameraAspectRatio = 4.0f/3.0f;
CGFloat camViewHeight = screenBounds.width * cameraAspectRatio;
CGFloat scale = screenBounds.height / camViewHeight;
m_imagePickerController.cameraViewTransform = CGAffineTransformMakeTranslation(0, (screenBounds.height - camViewHeight) / 2.0);
m_imagePickerController.cameraViewTransform = CGAffineTransformScale(m_imagePickerController.cameraViewTransform, scale, scale);
다음과 같이 변환하십시오.
#define CAMERA_TRANSFORM 1.12412
_picker.wantsFullScreenLayout = YES;
_picker.cameraViewTransform = CGAffineTransformScale(_picker.cameraViewTransform, CAMERA_TRANSFORM, CAMERA_TRANSFORM);
iOS 7, iphone 5S에 대한 내 경험에서 그림의 중심을 전체 화면 미리보기로 보려면 변환을 순차적으로 만드는 것이 아니라 연결해야합니다.
pickerController.cameraOverlayView = self.view;
CGSize screenSize = [[UIScreen mainScreen] bounds].size; // 320 x 568
float scale = screenSize.height / screenSize.width*3/4; // screen height divided by the pickerController height ... or: 568 / ( 320*4/3 )
CGAffineTransform translate=CGAffineTransformMakeTranslation(0,(screenSize.height - screenSize.width*4/3)*0.5);
CGAffineTransform fullScreen=CGAffineTransformMakeScale(scale, scale);
pickerController.cameraViewTransform =CGAffineTransformConcat(fullScreen, translate);
그리고 여기 Swift의 답변입니다.
let screenSize:CGSize = UIScreen.mainScreen().bounds.size
let ratio:CGFloat = 4.0 / 3.0
let cameraHeight:CGFloat = screenSize.width * ratio
let scale:CGFloat = screenSize.height / cameraHeight
let imag:UIImagePickerController = UIImagePickerController()
imag.cameraViewTransform = CGAffineTransformMakeTranslation(0, (screenSize.height - cameraHeight) / 2.0)
imag.cameraViewTransform = CGAffineTransformScale(imag.cameraViewTransform, scale, scale)
이것은 iOS 10에서 나를 위해 일했습니다.
let screenSize = UIScreen.main.bounds.size
let cameraAspectRatio = CGFloat(4.0 / 3.0)
let cameraImageHeight = screenSize.width * cameraAspectRatio
let scale = screenSize.height / cameraImageHeight
imagePickerController.cameraViewTransform = CGAffineTransform(translationX: 0, y: (screenSize.height - cameraImageHeight)/2)
imagePickerController.cameraViewTransform = imagePickerController.cameraViewTransform.scaledBy(x: scale, y: scale)
이 방법을 사용하여 규모를 계산했습니다.
// get the screen size
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
// establish the height to width ratio of the camera
float heightRatio = 4.0f / 3.0f;
// calculate the height of the camera based on the screen width
float cameraHeight = screenSize.width * heightRatio;
// calculate the ratio that the camera height needs to be scaled by
float scale = screenSize.height / cameraHeight;
imagePicker.cameraViewTransform = CGAffineTransformMakeScale(scale, scale);
내 문제가 해결되었습니다. :)
//Camera is 426 * 320. Screen height is 568. Multiply by 1.333 in 5 inch (iPhone5) to fill vertical
CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 71.0); //This slots the preview exactly in the middle of the screen by moving it down 71 points
self.imagePickerController.cameraViewTransform = translate;
CGAffineTransform scale = CGAffineTransformScale(translate, 1.333333, 1.333333);
self.imagePickerController.cameraViewTransform = scale;
이 코드를 사용해보십시오 :
picker.wantsFullScreenLayout = YES;
CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 71.0);
CGAffineTransform scale = CGAffineTransformScale(translate, 1.333333, 1.47);
picker.view.transform = scale;
PickerViewController.m
#define CAMERA_TRANSFORM 1.8
- (void)viewDidAppear:(BOOL)animated
{
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
// type = UIImagePickerControllerSourceTypeCamera;
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.allowsEditing = NO;
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.showsCameraControls=NO;
picker.extendedLayoutIncludesOpaqueBars = YES;
picker.cameraViewTransform = CGAffineTransformScale(picker.cameraViewTransform, CAMERA_TRANSFORM , CAMERA_TRANSFORM);
[self presentViewController:picker animated:YES completion:nil];
}else{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Message"
message:@"Device have no camera"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
}
참조 URL : https://stackoverflow.com/questions/2674375/uiimagepickercontroller-doesnt-fill-screen
'IT TIP' 카테고리의 다른 글
py.test를 실행하는 동안 ImportMismatchError 오류가 발생합니다. (0) | 2020.12.28 |
---|---|
2 개의 개별 프로세스간에 인 메모리 데이터를 공유 할 수 있습니까? (0) | 2020.12.28 |
C #은 foreach의 if 문을 기반으로 목록의 다음 항목으로 이동합니다. (0) | 2020.12.28 |
BitmapImage를 Bitmap으로 또는 그 반대로 변환 (0) | 2020.12.28 |
인라인 블록 요소를 중앙에 배치 할 수 있습니까? 그렇다면 어떻게해야합니까? (0) | 2020.12.28 |