2012-02-25 3 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», , но теперь пользовательский интерфейс был сглажен, но внешний вид моего фотобата всегда черный ...

Что мне делать дальше?

_______________________Updated___________________

У меня 2 viewControllers, A и B. А корень ViewController и B является ребенком в ViewController. В B есть кнопка для вызова камеры, чтобы сделать снимок.

После того, как пользователь сделал снимок, внешний вид фотографии становится той фотографией.

Когда я нажимаю новый B (без фотографии) от A, , все идет гладко. Но когда есть старый 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]; 
} 

Но мне нужно, чтобы получить эту фотографию, прежде чем отображается вид так как мне нужно установить эту фотографию на фоновое фото.

Итак, есть ли способ избежать наложения анимации вида? Потому что это действительно приводит к плохой работе с пользователем.

+0

Вы должны добавить тег для языка и GUI инструментарий, который вы используете, чтобы люди знающие в этих предметах заметят вопрос. –

+0

Спасибо за напоминание! –

ответ

1

Попробуйте выборки фото в backgroudn нити (я использую НОД здесь):

- (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, и все мои свойства неатомичны, есть ли что-нибудь, что я должен заплатить за подключение к вашему коду? Еще раз спасибо! –

+0

Просто попробуйте этот кусок кода :) Он должен работать и помочь предотвратить отставание вашего пользовательского интерфейса. – dom

+0

Кстати, я думаю, что я использую GDB в своем проекте, не имеет значения, что ваш GCD? –