Я работаю над iPad-приложением в Ios6, там, когда мы нажимаем кнопку правого бара, я даю действие, как показано ниже:
-(IBAction)camerabuttonAction:(id)sender
{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.delegate = self;
self.popoverController = [[UIPopoverController alloc] initWithContentViewController:picker];
[self.popoverController presentPopoverFromRect:CGRectMake(50, -250, 500, 300) inView:appDelegate.splitview.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
}
Моя проблема: когда я нахожусь в режиме Land scape, если я нажму кнопку. Камера отображается в портретном режиме (изображение появляется в обратном режиме, чтобы видеть) после каждого использования секунды. Но, если я встряхну IPad, то он отображается в LandScape i.e, в правильном направлении.
см. ниже изображения
Когда я нахожусь в режиме Land scape, если я нажму кнопку камеры, появится изображение, как показано ниже:
![enter image description here]()
Если я встряхну IPad, то камера показывает изображение, как показано ниже:
![enter image description here]()
Я много пробовал и искал в googled, но я не нашел никакого решения. Это убивает мое время, поэтому, если кто-то работал над этим, пожалуйста, помогите мне и отправьте образец кода.
Ответ 1
Вы можете попробовать передать преобразование в свой imagePickerController
imagePickerController.view.transform = CGAffineTransformMakeRotation(-M_PI/2);
Ответ 2
Я столкнулся с той же проблемой в своем проекте, я попробовал ниже и работает для меня
Мой код:
- (UIImage *)scaleAndRotateImage:(UIImage *)image {
int kMaxResolution = 640; // Or whatever
CGImageRef imgRef = image.CGImage;
CGFloat width = CGImageGetWidth(imgRef);
CGFloat height = CGImageGetHeight(imgRef);
CGAffineTransform transform = CGAffineTransformIdentity;
CGRect bounds = CGRectMake(0, 0, width, height);
if (width > kMaxResolution || height > kMaxResolution) {
CGFloat ratio = width/height;
if (ratio > 1) {
bounds.size.width = kMaxResolution;
bounds.size.height = roundf(bounds.size.width / ratio);
}
else {
bounds.size.height = kMaxResolution;
bounds.size.width = roundf(bounds.size.height * ratio);
}
}
CGFloat scaleRatio = bounds.size.width / width;
CGSize imageSize = CGSizeMake(CGImageGetWidth(imgRef), CGImageGetHeight(imgRef));
CGFloat boundHeight;
UIImageOrientation orient = image.imageOrientation;
switch(orient) {
case UIImageOrientationUp: //EXIF = 1
transform = CGAffineTransformIdentity;
break;
case UIImageOrientationUpMirrored: //EXIF = 2
transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0);
transform = CGAffineTransformScale(transform, -1.0, 1.0);
break;
case UIImageOrientationDown: //EXIF = 3
transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height);
transform = CGAffineTransformRotate(transform, M_PI);
break;
case UIImageOrientationDownMirrored: //EXIF = 4
transform = CGAffineTransformMakeTranslation(0.0, imageSize.height);
transform = CGAffineTransformScale(transform, 1.0, -1.0);
break;
case UIImageOrientationLeftMirrored: //EXIF = 5
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width);
transform = CGAffineTransformScale(transform, -1.0, 1.0);
transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
break;
case UIImageOrientationLeft: //EXIF = 6
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeTranslation(0.0, imageSize.width);
transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
break;
case UIImageOrientationRightMirrored: //EXIF = 7
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeScale(-1.0, 1.0);
transform = CGAffineTransformRotate(transform, M_PI / 2.0);
break;
case UIImageOrientationRight: //EXIF = 8
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeTranslation(imageSize.height, 0.0);
transform = CGAffineTransformRotate(transform, M_PI / 2.0);
break;
default:
[NSException raise:NSInternalInconsistencyException format:@"Invalid image orientation"];
}
UIGraphicsBeginImageContext(bounds.size);
CGContextRef context = UIGraphicsGetCurrentContext();
if (orient == UIImageOrientationRight || orient == UIImageOrientationLeft) {
CGContextScaleCTM(context, -scaleRatio, scaleRatio);
CGContextTranslateCTM(context, -height, 0);
}
else {
CGContextScaleCTM(context, scaleRatio, -scaleRatio);
CGContextTranslateCTM(context, 0, -height);
}
CGContextConcatCTM(context, transform);
CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef);
UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return imageCopy;
}
Ответ 3
Я изучаю вашу проблему в поиске Google и получаю некоторый результат или возможность, как ниже: -
результат 1
some Answer say, что его ошибка iOS 6, поэтому вы не можете зафиксировать ее как ниже Quetion: -
IPad камера popover Предварительный просмотр неправильного вращения и масштаба
результат 2
Я не думаю, что мы можем контролировать ориентацию камеры. Свойство ориентации камеры встроено, что изменяется с ориентацией устройства.
Режим ориентации ориентации iPad-камеры?
результат 3
вы можете управлять масштабированным живым iPhone-камерой в центре, физически перемещать рамку подборщика. от Bellow code: -
[picker.view setFrame:CGRectMake(xOffset,yOffset,picker.view.frame.size.width,picker.view.frame.size.height)];
надеюсь, что вы получили на самом деле решение. об этой ошибке или проблеме
Ответ 4
Я собираюсь попробовать хорошее предположение здесь, потому что я не сделал этого сам...
Пробовали ли вы создать подкласс UIImagePickerController и реализовать методы interfaceOrientation из ViewController (который является суперклассом)?
Ответ 5
Пожалуйста, попробуйте
[popController presentPopoverFromRect:CGRectMake(1024,
self.view.bounds.origin.y + (self.view.bounds.size.height / 2), 1, 1)
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionRight
animated:YES];
Ответ 6
У меня есть только режим lanscape для ipad, я волновался, потому что я читал все эти сообщения, но я использовал этот очень простой код, чтобы сделать снимок, и он отлично работает для моего единственного приложения lanscape. Важно, что я не выбираю изображение из библиотеки, я просто снимаю изображение и использую его, чтобы переложить его на другое изображение, оно отлично работает для меня.
if ([UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeCamera])
{
UIImagePickerController *imagePicker =
[[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType =
UIImagePickerControllerSourceTypeCamera;
imagePicker.mediaTypes = [NSArray arrayWithObjects:
(NSString *) kUTTypeImage,
nil];
imagePicker.allowsEditing = NO;
[self presentViewController:imagePicker
animated:YES completion:nil];
// [imagePicker release];
newMedia = YES;
}
-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[self.popoverController dismissPopoverAnimated:true];
// [popoverController release];
NSString *mediaType = [info
objectForKey:UIImagePickerControllerMediaType];
[self dismissViewControllerAnimated:YES completion:nil];
if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
UIImage *image = [info
objectForKey:UIImagePickerControllerOriginalImage];
imageView.image = image;
if (newMedia)
UIImageWriteToSavedPhotosAlbum(image,
self,
@selector(image:finishedSavingWithError:contextInfo:),
nil);
}
else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie])
{
// Code here to support video if enabled
}
}