0

今、私は少し変更を加えて、このコードを使用しています:

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 の外観は常に黒です...

次に何をすべきですか?

_______________________更新しました___________________

AとBの2つのviewControllerがあります。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 の背景に設定する必要があるため、ビューが表示される前にその写真を取得する必要があります。

では、ビューのアニメーションがくっつかないようにする方法はありますか? ユーザーエクスペリエンスが実際に低下するためです。

4

1 に答える 1

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];
}
于 2012-02-25T16:01:05.823 に答える