0

我有一個UIImagePickerController,其允許用戶拍照,然後我將其存儲在UIImageView如下:UINavigation過渡口吃

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
    self.photoImageView.image = nil; 
    [self.activityIndicatorView startAnimating]; 

    dispatch_async(dispatch_get_global_queue(0, 0),^
    { 
     UIImage *image = [[info objectForKey:@"UIImagePickerControllerOriginalImage"] retain]; 
     dispatch_async(dispatch_get_main_queue(),^
     { 
      self.photoImageView.image = image; 
      [self.activityIndicatorView stopAnimating]; 
      self.rightButton.enabled = YES; 
      [image release]; 
     }); 

    }); 
} 

當我通過這個圖像作爲一個參數到下一UIViewController即得到推動導航堆棧,UINavigation過渡口吃,是真正的波濤洶涌/醜陋。我已經完成了一個配置文件,並且我的代碼中沒有任何內容真正突出。

我知道用相機拍攝的照片可能很大,但如果我只是傳遞一個參考,爲什麼它應該對任何東西有影響?我有我在照片庫中拍攝的照片,當我從那裏選擇它們並將它們傳遞給下一個轉場時,一切都很順利。

任何人都有什麼洞察到可能造成這種情況?

回答

1

可能是因爲當新的UIViewController被推送到導航堆棧時發生調整大小的過程。

假設從iPhone 4相機拍攝的照片具有2592 x 1936分辨率(http://stackoverflow.com/questions/3270202/what-is-resolution-of-photo-taken-by-iphone-4-相機)。你的UIImageView有400×300像素大小,那麼調整大小的過程將發生在viewWillAppear中,這可能會導致你的過渡口吃。

這幾種解決辦法:

  1. 顯示在viewDidAppear的形象,只是不停的參考圖像,並將其設置在viewDidAppear的imageView.image。

  2. 在顯示圖片之前,首先調整圖片的大小,比如先說成640 x 960。

+0

謝謝,你知道我剛剛來過這個:http://wiresareobsolete.com/wordpress/2010/08/uiimagepickercontroller/它確切地描述了你正在談論的調整大小。我的問題是,我可以調用哪些代碼來確定調整圖像大小的正確大小?它應該只是屏幕的邊界(如果有視網膜,則爲* 2) –

+0

調整大小的正確尺寸取決於UIImageView的尺寸本身以及您想要的縱橫比(縱橫比,縱橫比等)。 我建議640 * 960,因爲這是屏幕的視網膜分辨率(不是iPhone 5的),並希望它會足夠小​​,使過渡口吃消失。 如果您想將調整後的版本保存到相機膠捲庫(將顯示全屏照片),該分辨率也可以使用。 – ewiinnnnn

+0

對我來說,我在imageView中縮放圖像,所以我猜屏幕尺寸會做到這一點。你介意把這個環節放在#2的答案中嗎? –