0

インターネットから画像を読み込んだUIWebViewがあります。UIActionSheetを開くボタンがあり、UIWebViewでこの写真をツイートするオプションがあります。UIActionSheetでTweetを押すと、Tweetが消え、UIWebviewが再び表示されます。バックグラウンドでは、画像がインターネットから読み込まれ、ツイートに添付されます。画像サイズによっては、時間がかかる場合があります。ここで、ユーザーが何が起こっているのかを知っているという情報を表示したいと思います。Twitterコンソールが表示されるのをユーザーが待っている間にMBProgressHUDを表示したい。ボタンを押してUIActionSheetが消えたときに、HUDを起動しようとしましたが、表示されませんでした。Twitterconsoleが表示されるとバックグラウンドで表示されます。これは少し遅れます。では、HUDを開始/停止するのに最適な場所はどこですか?ありがとう

- (void) actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex{


if (buttonIndex == 0)
{
    [self hudTweet];
    [self tweet];
       }

- (void) tweet {

if ([TWTweetComposeViewController canSendTweet])
{
    TWTweetComposeViewController *tweetSheet = 
    [[TWTweetComposeViewController alloc] init];
    [tweetSheet setInitialText:
     @"Tweeting from "];

    NSString *fullURL = beverageViewString; 
    NSURL *url = [NSURL URLWithString:fullURL];


    NSString *paths = NSTemporaryDirectory();
    NSError *error;

    if (![[NSFileManager defaultManager] fileExistsAtPath:paths])
        [[NSFileManager defaultManager] createDirectoryAtPath:paths withIntermediateDirectories:NO attributes:nil error:&error];

    NSString *filePath = [paths stringByAppendingPathComponent:[self.title stringByAppendingFormat:@".jpeg"]];
    NSData *jpegFile = [NSData dataWithContentsOfURL:url];
    [jpegFile writeToFile:filePath atomically:YES];

    [tweetSheet addImage:[UIImage imageWithContentsOfFile:filePath]];


    [self presentModalViewController:tweetSheet animated:YES];


}
else
{
    UIAlertView *alertView = [[UIAlertView alloc] 
                              initWithTitle:@"Sorry"                                                             
                              message:@"You can't send a tweet right now because your account isn't configured"
                              delegate:self                                              
                              cancelButtonTitle:@"OK"                                                   
                              otherButtonTitles:nil];
    [alertView show];
}

- (void) hudTweet {


HUD = [[MBProgressHUD alloc] initWithWindow:[UIApplication sharedApplication].keyWindow];

[self.view.window addSubview:HUD];



HUD.delegate = self;

HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
HUD.labelText = @"Loading";
HUD.detailsLabelText = @"updating data";

}

4

1 に答える 1

0

メインスレッドで画像を同期的にダウンロードしているため、UIが更新されません。詳細な説明と考えられる回避策については、この回答を参照してください。

ただし、最適なオプションは、NSURLRequestなどを使用して非同期でイメージをダウンロードすることです(showURL:の例とそれに応じたデリゲートコールバックを参照してください)。

于 2012-04-21T21:05:35.770 に答える