3

Я видел некоторые из этих проблем, но в основном касался раскадровки.Modal View Controller загрузка с черным фоном

Я просто прагматически создаю modal view controller. Это на самом деле для использования с достижимостью, когда соединение рассматривается как NotReachable я представляю модальный контроллер представления, как это:

-(void)checkConnection: (Reachability*) curReach { 
    NetworkStatus netStatus = [curReach currentReachabilityStatus]; 
     if (netStatus == NotReachable) { 
      NSLog(@"inernet reach - not reachable"); 

      UIViewController *modalViewController = [[MESConnectionModalViewController alloc] init]; 
      modalViewController.view.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.2f]; 
      modalViewController.view.opaque= YES; 
      [self.window.rootViewController presentModalViewController:modalViewController animated:YES]; 

} 
} 

В контроллере представления MESConnectionModalViewController нет в настоящее время нет коды, только стандарта.

Когда модальный вид переходит на текущий вид, фон выглядит корректно (это на короткое секунду или два). После того, как модаль полностью перекричен, он становится черным, а не частично черным. Я хочу, чтобы в основном немного освещать текущий контент. Вышеприведенный код является seutp в делегате приложения и вызывается всякий раз, когда обновляется Reachability, поэтому я пытаюсь показать контроллер модального представления, пока интернет-соединение разрешается.

+0

Пытаются установить модальное представление, чтобы быть меньше, чем сама зрения ? Если да, почему бы не использовать cg rect и установить для него координаты, поэтому, когда он будет представлен, он будет меньше, чем представление. –

ответ

5

Модальные виды не поддерживают прозрачность (для iPhone).
Но вы можете добавить «UIView» родительскому зрения и оживить его с помощью CoreAnimation

EDIT

-(void)checkConnection: (Reachability*) curReach { 
    NetworkStatus netStatus = [curReach currentReachabilityStatus]; 
    if (netStatus == NotReachable) { 
     NSLog(@"internet reach - not reachable"); 
     UIViewController *modalViewController = [[MESConnectionModalViewController alloc] init]; 
     //Set y position to animate it 
     CGRect frame = modalViewController.view.frame; 
     frame.origin.y = [[UIApplication sharedApplication] keyWindow].frame.size.height; 
     modalViewController.view.frame = frame; 
     modalViewController.view.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.2f]; 
     [self.view addSubview:modalViewController.view]; 
     //Animate appearing 
     frame.origin.y = 0; 
     [UIView animateWithDuration:0.2 animations:^{ 
      modalViewController.view.frame = frame; 
     }]; 
    } 
} 

Также вы можете хранить modalViewController в собственности доступом к нему в будущем.

+0

Не могли бы вы объяснить, как это сделать, пожалуйста? Как немного больше фона, это используется как сообщение пользователю в любом месте приложения, поэтому настройка в делетете приложения при отключении соединения с Интернетом. – StuartM

+0

Спасибо за редактирование, я получаю две ошибки. [self.view line ... вид свойства не найден на делегате приложения. Это связано с тем, что я не могу добавить представление в делегат приложения, я должен добавить его к представленному контроллеру представления (в зависимости от того, что в настоящее время отображается), но я не уверен, как это сделать? Во-вторых, ошибка в строке frame.y ... нет члена с именем y в struct CGRect? – StuartM

+0

Отредактированный второй номер. Вы можете попробовать добавить subview в 'UIWindow'. [[[UAppication sharedApplication] keyWindow] addSubview: modalViewController.view]; –

1

то, что вам нужно, это второй UIWindow в AppDelegate класс вы можете сделать что-то вроде UIAlertView поверх всего! поверьте мне, это то, что вам нужно, и убедитесь, что установили

myWindow2.windowLevel = UIWindowLevelAlert; 

открыть окно (получить указатель):

UIWindow *myWindow2 = [(AppDelegate *)[UIApplication sharedApplication].delegate myWindow2]; 
+1

Не могли бы вы предоставить немного больше информации о том, что нужно выполнить?Должен ли я подклассифицировать UIAlertView и изменить viewDidLoad, чтобы включить цветовую схему для представления? Тогда как это представлено? – StuartM

+0

для оповещений о ваших настройках - оповещения по умолчанию iOS (UIAlertView или UIActionSheet) ИЛИ создайте свой собственный: 1-добавьте окно в AppDelegate и установите уровень его на уровень предупреждения. 2- добавьте свое настраиваемое предупреждение, которое представляет собой базовый класс UIView, который имеет метку заголовка, текстовую метку и некоторые кнопки, а затем используйте window.hidden = [ДА/НЕТ], чтобы показать ваше предупреждение! – 2013-03-18 17:22:12