UIView,动画,完成块,UIAlertView

时间:2013-10-23 00:41:31

标签: ios objective-c uiview uialertview

我有一个带登录屏幕的应用程序,其中包含登录按钮和注册按钮,如果我发现无法访问互联网则使用可达性我通过显示覆盖视图隐藏这些按钮

 self.coveringview

现在我用这个视图的alpha做一些简单的动画,一旦完成,我想要弹出一个alertview来告诉用户发生了什么,在这段代码中你可以看到我通过提醒来做到这一点。显示在animatewithduration的完成块中。

bahvior不是我想要的,警报弹出太快而没有向用户显示我希望它显示的淡出,我该怎么办?

NetworkStatus netStatus = [reachability currentReachabilityStatus];
if(netStatus == NotReachable) {
   UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No Internet Connection"
                                                  message:@"Unable to connect to the server.  
     Please check your internet connection and try again."
                                                 delegate:self
                                        cancelButtonTitle:nil
                                        otherButtonTitles:@"OK", nil];
  [UIView animateWithDuration:1.0
                         animations:^{
                                self.coveringView.alpha = 1.0;
                         }completion:^(BOOL finished) {
                             // this is the problem here, I need to make this alert show up after  
                             the fade out occurs completely
                             [alert show];
                             self.coveringView.hidden = NO;
                         }];
}
else {
  [UIView animateWithDuration:1.0
                   animations:^{
                      self.coveringView.alpha = 0.0;
                   }completion:^(BOOL finished) {
                      self.coveringView.hidden = YES;
                   }];
}

2 个答案:

答案 0 :(得分:1)

从您的界面生成器中删除self.coveringView.hidden = YES并仅设置alpha = 0

NetworkStatus netStatus = [reachability currentReachabilityStatus];
if(netStatus == NotReachable) {
   UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No Internet Connection"
                                                  message:@"Unable to connect to the server.  
     Please check your internet connection and try again."
                                                 delegate:self
                                        cancelButtonTitle:nil
                                        otherButtonTitles:@"OK", nil];

    [UIView animateWithDuration:1.0
                     animations:^{
                            self.coveringView.alpha = 1.0;
                     }completion:^(BOOL finished) {
                         // this is the problem here, I need to make this alert show up after  the fade out occurs completely
                      if(finished){
                         [alert show];
                      }
                     }];                     



}
else {
  [UIView animateWithDuration:1.0
                   animations:^{
                      self.coveringView.alpha = 0.0;
                   }completion:^(BOOL finished) {
                      if(finished){
                      self.coveringView.hidden = YES;
                      }
                   }];

答案 1 :(得分:0)

您不需要同时使用setHidden和0.0的alpha值。它们都会生成视图,以便它不会拦截触摸。隐藏/未隐藏可能与alpha更改冲突。

尝试简化如下:

NetworkStatus netStatus = [reachability currentReachabilityStatus];
if(netStatus == NotReachable) {
   UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No Internet Connection"
                                                  message:@"Unable to connect to the server.  
     Please check your internet connection and try again."
                                                 delegate:self
                                        cancelButtonTitle:nil
                                        otherButtonTitles:@"OK", nil];
  [UIView animateWithDuration:1.0
                         animations:^{
                                self.coveringView.alpha = 1.0;
                         }completion:^(BOOL finished) {
                             //I need to make this alert show up after the fade out occurs completely
                             [alert show];
                         }];
}
else {
  [UIView animateWithDuration:1.0
                   animations:^{
                      self.coveringView.alpha = 0.0;
                   }completion:^(BOOL finished) {
                   }];
}