2012-08-07 3 views
1

UIViewControllerUITableView이 있습니다. 나는 그 위에 서브 뷰로 UIView을 추가한다. 서브 뷰에서 UIButton 중 하나를 누르면 눈에 띄는 지연이 있습니다. 어떻게하면 더 빨리 만들 수 있습니까?단추 누를 때 IBAction이 지연됩니다.

참조 비디오 : http://www.youtube.com/watch?v=KWy6NrZUeqA&feature=youtu.be

- (IBAction)tweetThat:(id)sender { 
    [MBProgressHUD showHUDAddedTo:self.socialMediaView animated:YES]; 

    dispatch_queue_t queueOne=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
    dispatch_sync(queueOne, ^{ 
     NSString *[email protected]"BLABLABLATweet"; 

     if ([TWTweetComposeViewController canSendTweet]) 
     { 
      TWTweetComposeViewController *tweetSheet = 
      [[TWTweetComposeViewController alloc] init]; 
      [tweetSheet setInitialText:tweetBody]; 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       [MBProgressHUD hideHUDForView:self.controllerView animated:YES]; 
       [self presentModalViewController:tweetSheet animated:YES]; 
      }); 
     } 
     }); 
} 

답변

0

dispatch_sync를 dispatch_async로 변경하십시오. 반환 할 때까지 UI를 잠그고 싶다면 백그라운드로 파견되는 지점은 무엇입니까?

0

LAG가 TWTweetComposeViewController에서입니다. 시스템 최적화 때문에 당신이 할 수있는 일은 없습니다. 당신은 아마도 당신이 버튼을 두 번째 및 세 번 그것이 사라 졌다고 알게 될 것입니다.

+0

예, 다음 번에 속도가 빨라진다는 것을 알았습니다. 그러나 MBProgressHUD가 왜 지연됩니까? MBProgressHUD는 메인 스레드에서 가장 먼저 호출되는 반면, TWTweetComposeViewController는 백그라운드 스레드에서 alloc'd 및 init'd입니다. 또한 "시스템 최적화"는 무엇을 의미합니까? –

+0

나는 잘 모르겠다. 나는'dispatch_queue's 자신을 많이 사용하지 않고, 보통'performSelectorOnBackgroundThread'를 세트로 사용하고 메소드의 종류를 잊어 버립니다. 시스템 최적화에 관해서는'TWTweetComposeViewController' 때문에 어떤 지연이 있었는지 말할 수 있습니다. 나는 그것을 고칠 수 있다고 생각하지 않습니다. 애플은해야만한다. –

1

위에서 시도한 디스패치 방법을 사용했지만 몇 가지 변경 사항이 있습니다. 정말 경험이 훨씬 좋았습니다. "loadingView"는 이름 그대로, 트윗보기가 나타나기 전에 표시되는로드보기입니다.

loadingView.hidden = NO; 
    [loadingView setNeedsDisplay]; 
    if ([TWTweetComposeViewController canSendTweet]) 
    { 
     double delayInSeconds = 0.5; 
     dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
     dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
      TWTweetComposeViewController *tweet = [[TWTweetComposeViewController alloc]init]; 
      [tweet setInitialText:@"I'm using a new app called TickTalk to help my speaking cadence. Check it out!"]; 
      [tweet addURL:[NSURL URLWithString:@"http://www.ticktalkapp.com"]]; 
      TWTweetComposeViewControllerCompletionHandler 
      completionHandler = 
      ^(TWTweetComposeViewControllerResult result) { 
       switch (result) 
       { 
        case TWTweetComposeViewControllerResultCancelled: 
         NSLog(@"Twitter Result: canceled"); 
         break; 
        case TWTweetComposeViewControllerResultDone: 
         NSLog(@"Twitter Result: sent"); 
         break; 
        default: 
         NSLog(@"Twitter Result: default"); 
         break; 
       } 
       loadingView.hidden = YES; 
       [self dismissModalViewControllerAnimated:YES]; 
      }; 
      [tweet setCompletionHandler:completionHandler]; 
      [self presentModalViewController:tweet animated:YES]; 
     }); 
    } 
    else 
    { 
     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Sorry" message:@"Your device is not setup to tweet" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alert show]; 
     loadingView.hidden = YES; 
    } 
관련 문제