В приложении для iphone / ios, как сделать прозрачный «загрузочный» оверлей, который покрывает навигационную панель и клавиатуру? - PullRequest
10 голосов
/ 21 апреля 2011

В приложении для iphone / ios, как мне сделать прозрачный «загрузочный» оверлей, который покрывает панель навигации и клавиатуру?

Я пробовал следующее, но оно не охватывает ни панель навигациини клавиатура:

UIView *overlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
overlay.backgroundColor = [UIColor colorWithWhite:0 alpha:.5];
[self.view addSubview:overlay];

Спасибо

Ответы [ 5 ]

6 голосов
/ 21 апреля 2011

Если вы хотите простую библиотеку, которая позаботится об этом, Дэвид Синклер DSActivityView хорош.

3 голосов
/ 24 февраля 2014

иногда, когда мне лень использовать другие библиотеки, я просто делаю это:

// create a custom black view
UIView *overlayView = [[UIView alloc] initWithFrame:self.navigationController.view.frame];
overlayView.backgroundColor = [UIColor blackColor];
overlayView.alpha = 0.8;
overlayView.tag = 88;

// create a label
UILabel *message = [[UILabel alloc] initWithFrame:self.navigationController.view.frame];
[message setFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:25.0f]];
message.text = @"message to my dear user";
message.textColor = [UIColor whiteColor];
message.textAlignment = NSTextAlignmentCenter;
message.tag = 99;

// and just add them to navigationbar view
[self.navigationController.view addSubview:overlayView];
[self.navigationController.view addSubview:message];

и затем вызываю метод, который находит эти представления, затемняет их и удаляет их:

-(void) removeOverlayViews{
    UIView *view = (UIView *)[self.navigationController.view viewWithTag:88];
    UILabel *label = (UILabel *)[self.navigationController.view viewWithTag:99];

    [UIView animateWithDuration:0.5
         animations:^{
             view.alpha = 0.0;
             label.alpha = 0.0;
         }
         completion:^(BOOL finished){
             [view removeFromSuperview];
             [label removeFromSuperview];
         }
     ];
}

иногда я просто хочу показать сообщение на несколько секунд, поэтому я вызываю его сразу после добавления наложенных представлений в navigationController:

[self performSelector:@selector(removeOverlayViews) withObject:nil afterDelay:4];
2 голосов
/ 21 апреля 2011

Оформить DSActivityView .

2 голосов
/ 21 апреля 2011

Добавьте вместо этого self.view.window.Это, возможно, не покрывает клавиатуру все же.В этом случае вам нужно создать собственное окно.Хотя это не рекомендуется Apple.Что означает: будьте осторожны и тщательны в своей реализации.

0 голосов
/ 21 апреля 2011

Вы можете попробовать лист действий вместо прозрачного представления для загрузки:

actionSheetLoad = [[UIActionSheet alloc] initWithTitle:@"Loading..Please wait" delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];

[actionSheetLoading showInView:showInView];

Лист действий будет перекрывать весь вид до тех пор, пока не будут запущены фоновые задачи времени (скажем, выборка данных с сервера / попадание по URL).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...