Я заставляю пользователя выбрать изображение с помощью 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)];
Но изображение по-прежнему масштабируется до высокого и большего размера, чем экран!