2012-02-25 60 views
0

現在我正在使用此代碼,用少許修改:UI變得有點卡住,因爲取照片

if (self._photoPath && !self._photo) { 
     dispatch_queue_t bg_thread = dispatch_queue_create("com.yourcompany.bg_thread", NULL); 
     dispatch_queue_t main_queue = dispatch_get_main_queue(); 
     dispatch_async(bg_thread,^{ 
      NSData *data = [NSData dataWithContentsOfFile:self._photoPath]; 
      if(data != nil) { 
       dispatch_async(main_queue,^{ 
        self._photo = [UIImage imageWithData:data]; 
        [self.photoButton setImage:[UIImage imageNamed:@"photoButton.png"] forState:UIControlStateNormal]; 
       }); 
      } 
     }); 

    } 

正如你所看到的,其實在我拿到那張照片我要立即將其設置爲我的「photoButton」, 但現在,UI變平了,但我的photoButton的外觀總是黑色的...

接下來應該做什麼?

_______________________Updated___________________

我有2個viewControllers,A和B. A爲根的viewController,B是A的孩子的viewController。 在B中,有一個用於調用相機拍照的按鈕。

用戶拍照後,照片的外觀就變成了這張照片。

當我從A推新B(沒有照片), 事情順利。 但是,當有一個古老的B帶的一張照片, 動畫變得有點卡住,引起下面的代碼我猜:

- (void)viewWillAppear:(BOOL) animated { 
    if (self._photoPath && !self._photo) { 
      NSData *data = [NSData dataWithContentsOfFile:self._photoPath]; 
      if(data != nil) 
       self._photo = [UIImage imageWithData:data]; 
    } 
    [super viewWillApear]; 
} 

但顯示的視圖之前,我確實需要得到那張照片因爲我需要將該照片設置爲我的photoButton背景。

那麼,有沒有辦法避免粘貼視圖的動畫?因爲它確實會導致糟糕的用戶體驗。

+0

您應該添加您正在使用的語言和GUI工具包的標記,所以人們在這些學科知識淵博會發現這個問題。 – 2012-02-25 15:53:57

+0

感謝您的提醒! – 2012-02-25 15:55:39

回答

1

嘗試獲取在backgroudn線程的照片(我使用GCD這裏):

- (void)viewWillAppear:(BOOL) animated { 
    if (self._photoPath && !self._photo) { 
     dispatch_queue_t bg_thread = dispatch_queue_create("com.yourcompany.bg_thread", NULL); 
     dispatch_queue_t main_queue = dispatch_get_main_queue(); 
     dispatch_async(bg_thread,^{ 
      NSData *data = [NSData dataWithContentsOfFile:self._photoPath]; 
      if(data != nil) { 
      dispatch_async(main_queue,^{ self._photo = [UIImage imageWithData:data]; }); 
      } 
     }); 
    } 
    [super viewWillApear]; 
} 
+0

謝謝!但我從來沒有使用後臺線程,除了簡單的UIAnimation之外,我甚至沒有使用任何額外的手動線程。這是一個iPhone應用程序,我的所有屬性都是非原子的,在使用你的代碼時,我應該支付任何費用嗎?再次感謝! – 2012-02-25 16:23:28

+0

只需嘗試這段代碼:)它應該有效並且有助於防止你的UI滯後。 – dom 2012-02-25 16:24:49

+0

順便說一句,我想我在我的項目中使用GDB,它對你的GCD有什麼影響嗎? – 2012-02-25 16:25:35