2011-06-27 58 views
0

我讓用戶使用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)]; 

但圖像仍然放大到高,然後大屏幕!

回答

1

您可以在界面builder中設置imageview的屬性爲aspectfit。這應該通過編程來幫助或編程,您可以使用 imageView.contentMode = UIViewContentModeScaleAspectFit;

+0

感謝您的輸入,但請仔細閱讀問題,我已經有了這個設置,但它似乎沒有任何區別!:pickerView.contentMode = UIViewContentModeScaleAspectFit; – GameDev

+0

有人嗎?它肯定不是那麼複雜?也許只是一個疏忽?! – GameDev