自获取照片以来,UI有点卡住了

时间:2012-02-25 15:27:42

标签: ios objective-c user-interface animation smoothing

现在我正在使用这段代码,稍作修改:

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的外观总是黑色......

接下来我该怎么做?

_______________________更新___________________

我有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的背景。

那么,有没有办法避免粘贴视图的动画?因为它确实会导致糟糕的用户体验。

1 个答案:

答案 0 :(得分:1)

尝试在后台线程中获取照片(我在这里使用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];
}