グラフを描画する私のアプリには、グラフを画像として送信し、グラフをフォト ライブラリに保存するオプションがあります。ただし、グラフには最大 4000 個以上のデータが含まれる場合があるため、画像の取得に時間がかかります。したがって、私は別のスレッドでその作業を行っており、次のように進行状況を示すために hud を使用しています。
- (void)sendImageAsMail
{
if ([MFMailComposeViewController canSendMail])
{
// Configure HUD
self.myHUD.mode = MBProgressHUDModeIndeterminate;
self.myHUD.labelText = @"Acquiring image, please wait";
self.myHUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
__block UIImage *graphImage;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^{
CPTGraph *currentGraph = self.hostView.hostedGraph;
graphImage = [currentGraph imageOfLayer];
self.imageData = UIImagePNGRepresentation(graphImage);
[[NSNotificationCenter defaultCenter] postNotificationName:@"mailReady" object:nil];
});
}
else
{
[self showAlertWithTitle:@"Cannot Send Mail" andText:@"Your mail configuration is incorrect"];
}
}
- (void)mailReady:(NSNotification *)notification
{
MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];
mailVC.mailComposeDelegate = self;
[mailVC setSubject:[NSString stringWithFormat:@"some subject here (%@)", [[[iDSConstants sharedConstants]codeTypes] objectAtIndex:_codeIndex]]];
[mailVC setMessageBody:@"some body" isHTML:NO];
[mailVC addAttachmentData:self.imageData mimeType:@"image/png" fileName:@"Design Spectrum"];
[MBProgressHUD hideAllHUDsForView:self.view animated:YES];
[self presentViewController:mailVC animated:YES completion:nil];
}
ここで面白いことに、hud は mailviewcontroller を表示する前に閉じられません (場合によっては非表示になります)。キャンセルを押して電子メールを閉じると、hud が回転し、さらに数秒間回転し続けます。コードのさまざまな場所でハッドを閉じるなど、別のアプローチを試しました。
(上記のコードの一部)
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^{
CPTGraph *currentGraph = self.hostView.hostedGraph;
graphImage = [currentGraph imageOfLayer];
self.imageData = UIImagePNGRepresentation(graphImage);
**// get main thread for dismissing the hud
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:self.view animated:YES];
});**
[[NSNotificationCenter defaultCenter] postNotificationName:@"mailReady" object:nil];
});
それでも、以前は隠れていたはずのハッドを見ることができます。この問題に関する洞察をいただければ幸いです。