今、私は少し変更を加えて、このコードを使用しています:
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 の背景に設定する必要があるため、ビューが表示される前にその写真を取得する必要があります。
では、ビューのアニメーションがくっつかないようにする方法はありますか? ユーザーエクスペリエンスが実際に低下するためです。