Ответ 1
Если вам нужна простая библиотека, которая позаботится об этом, это будет хорошо. Дэвид Синклер DSActivityView.
В iphone app/ios, как сделать прозрачную "загрузку" наложения, которая охватывает панель навигации и клавиатуру?
Я пробовал следующее, но он не охватывает ни навигационную панель, ни клавиатуру:
UIView *overlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
overlay.backgroundColor = [UIColor colorWithWhite:0 alpha:.5];
[self.view addSubview:overlay];
Спасибо
Если вам нужна простая библиотека, которая позаботится об этом, это будет хорошо. Дэвид Синклер DSActivityView.
иногда, когда я ленив использовать другие библиотеки, я просто делаю это:
// 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];
Добавьте его вместо self.view.window
. Однако это может не покрыть клавиатуру. В этом случае вам нужно создать собственное окно. Хотя это не рекомендуется Apple. Это означает: будьте осторожны и основательны в своей реализации.
Отъезд DSActivityView.
Вы можете попробовать листок действий вместо прозрачного представления для загрузки:
actionSheetLoad = [[UIActionSheet alloc] initWithTitle:@"Loading..Please wait" delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
[actionSheetLoading showInView:showInView];
В листе действий будет отображаться весь вид до тех пор, пока не будут запущены фоновые задачи времени (например, выборка данных с сервера/удаленных URL-адресов).