UIImagePickerController imagePicker не подходит для экрана iPhone 4 - PullRequest
0 голосов
/ 27 июня 2011

Я заставляю пользователя выбрать изображение с помощью UIImagePickerControllerSourceTypePhotoLibrary.

Затем у меня есть следующий метод, который получает отредактированное изображение, применяет наложение и затем передает его моему PostPictureViewController для отображения. На дисплее я хочу, чтобы изображение сохранило исходное соотношение сторон и поместило его на экран.

Он отлично работает на симуляторе, используя 4.3 SDK, но когда я помещаю его на экран дисплея сетчатки iPhone 4, изображение увеличивается в верхнем левом углу, и только 1/4 изображения отображается на весь экран, избавляясь от оригинальное соотношение сторон!

Как я могу уменьшить это, чтобы соответствовать экрану, как это работает на симуляторе?

Я также попытался полностью избавиться от наложения и просто вернуть исходное и отредактированное изображение для отображения, но даже это не сохраняет его исходное соотношение сторон !!!

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{        
    // Access the cropped image from info dictionary
    image = [info objectForKey:@"UIImagePickerControllerEditedImage"];

    // Combine image with overlay before saving!!
    image = [self addOverlayToImage:image];

    overlayGraphicView.image = nil;

    // Take the picture image to the post picture view controller
    postPictureView = [[PostPictureViewController alloc] init:image];    
    [picker pushViewController:postPictureView animated:YES];

    [picker release],picker = nil;
}

Вот моя функция добавления наложенного изображения:

- (UIImage*) addOverlayToImage:(UIImage*)originalImage
{
    //CGRect cgRect =[[UIScreen mainScreen] bounds];
    CGSize size = originalImage.size;

    if (UIGraphicsBeginImageContextWithOptions != NULL) {
        // Use for iPhone 4 Retina
        UIGraphicsBeginImageContextWithOptions(size, YES, 0.0);
    } else {
        UIGraphicsBeginImageContext(size);
    }

    UIImage* overlayImage = [UIImage imageNamed:overlayGraphicName];

    [originalImage drawAtPoint:CGPointMake(0,0)];

    [(UIImage *)overlayImage drawAtPoint:CGPointMake(0,(originalImage.size.height/2 - overlayImage.size.height/2) + 20)];

    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
    [finalImage retain];

    UIGraphicsEndImageContext();

    return finalImage;
}

и, наконец, в моем PostPictureViewController я отображаю изображение в viewdidload:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.view setBackgroundColor:[UIColor blackColor]];

    // Load the picker image for viewing
    UIImageView *pickerView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320, 480)];
    [pickerView setImage:pickerImage];
    pickerView.contentMode = UIViewContentModeScaleAspectFit;
    [self.view addSubview:pickerView];
    [pickerView release],pickerView=nil;
}

В этом методе viewdidload для отображения изображения, если я делаю это:

UIImageView *pickerView = [[UIImageView alloc] initWithImage:pickerImage];

тогда изображение не центрируется вертикально по отношению к экрану на симуляторе и начинается с 0,0, где, фактически определяя ширину и высоту кадра, CGRectMake центрирует его на экране.

Очевидно, что для iPhone 4 я тоже пытался изменить это:

UIImageView *pickerView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 640, 960)];

Но изображение по-прежнему масштабируется до высокого и большего размера, чем экран!

1 Ответ

1 голос
/ 27 июня 2011

вы можете установить свойство viewview для aspectfit в построителе интерфейса. Это должно помочь. Или при программировании вы можете использовать imageView.contentMode = UIViewContentModeScaleAspectFit;

...