[英]UIImagePickerController imagePicker not fitting to iPhone 4 Screen
我让用户使用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)];
但是图像仍然会放大到比屏幕更大和更大!
您可以在界面构建器中将imageview的属性设置为Aspectfit。这会有所帮助。或者通过编程,您可以使用imageView.contentMode = UIViewContentModeScaleAspectFit;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.