我让用户使用UIImagePickerControllerSourceTypePhotoLibrary选择图像。UIImagePickerController imagePicker不适合iPhone 4屏幕
然后,我有以下方法获取编辑后的图像,应用覆盖,然后将其传递到我的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使用CGRectMake实际定义帧宽度和高度,使其居中在屏幕上。
显然,对于iPhone 4的我试图改变过这个:
UIImageView *pickerView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 640, 960)];
但图像仍然放大到高,然后大屏幕!
感谢您的输入,但请仔细阅读问题,我已经有了这个设置,但它似乎没有任何区别!:pickerView.contentMode = UIViewContentModeScaleAspectFit; – GameDev
有人吗?它肯定不是那么复杂?也许只是一个疏忽?! – GameDev