Что касается этого вопроса , я обнаружил, что баннеры вызывают замедление работы на iOS 5. Оказывается, сообщение Game Center «Добро пожаловать, вы вошли в систему» делает то же самое, и иногда оно прерывает меня несколько раз в игре, если я входить/выходить из приложения во время игры, так как оно многократно входит/выходит из системы.
Есть ли способ отключить это уведомление, оставив Game Center включенным? Я попытался отозвать права на уведомление баннера из Game Center, но всплывающее окно все еще появляется.
Этот баннер входа в систему является предоставленным аспектом API Game Center в iOS SDK, насколько мне известно, у разработчика нет способа отключить его открытие после завершения входа в Game Center. Как пользователь, конечно, нет возможности отключить его, потому что он является частью скомпилированного исходного кода приложения.
Однако обратите внимание, что причиной задержек и пропусков является не баннер. На самом деле это весь процесс входа в Game Center. Мой единственный совет: когда вы открываете игру, в которой есть логины Game Center, открываете ее до первого функционального экрана и просто ждете ~ 5-10 секунд, необходимых для отображения баннера Game Center. После того, как баннер отобразится и исчезнет, действуйте в обычном режиме, и вас это больше не повлияет.
Да, можно программно подавить приветственный баннер Game Center из вашего приложения, по крайней мере, в iOS 7. Мой подход основан на нескольких наблюдениях:
Таким образом, вы можете просто несколько раз опрашивать окна вашего приложения в течение этих нескольких секунд, ожидая появления дополнительного окна. (Наблюдение за ключом и значением, вероятно, является «правильным» способом сделать это, но я ленив.) Когда появится окно, проверьте, содержит ли оно иерархию подпредставления, как описано выше, что указывает на то, что это, вероятно, баннер Game Center. Если это так, установите альфа окна на 0. Вот и все.
Вот некоторый код, который выполняет это в моем приложении. Я вызываю этот метод сразу после попытки аутентифицировать локального игрока, и он вызывает себя в течение нескольких секунд, пока не найдет (и не скроет) баннер, или же истечет время ожидания:
- (void)suppressGCBanner:(id)object {
int osVersion = [[[UIDevice currentDevice] systemVersion] intValue];
if (osVersion != 7) return; // only tested against iOS 7
static int iter = 0; // try for 4 seconds, typically takes about one second for banner to appear
static int origWindowCount = 0;
NSArray* windows = [UIApplication sharedApplication].windows;
if (origWindowCount == 0) origWindowCount = (int)[windows count];
BOOL ipad = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad;
float bannerHeight = ipad ? 66.0f : 64.0f; // GC banner has height 66 on iPad, 64 on iPhone
if ([windows count] > origWindowCount) {
NSLog(@"suppressGCBanner: found extra window, testing");
UIWindow* window = [windows objectAtIndex:1]; // in my testing, the GC banner is always at index 1
for (UIView* view in [window subviews]) {
CGRect frame = view.frame;
NSLog(@"subview size: %f, %f", frame.size.width, frame.size.height);
if (frame.size.height != bannerHeight) continue;
for (UIView* subview in [view subviews]) {
CGRect frame = subview.frame;
NSLog(@"sub-subview size: %f, %f", frame.size.width, frame.size.height);
if (frame.size.width == 42.0f && frame.size.height == 42.0f) { // Game Center icon is 42x42
NSLog(@"found GameCenter banner: hiding. iter = %i", iter);
window.alpha = 0.0f; // make the window invisible!
return;
}
}
}
}
if (++iter > 200) {
NSLog(@"suppressGCBanner: timeout, bailing");
return;
}
// ____ otherwise recurse
[self performSelector:@selector(suppressGCBanner:) withObject:nil afterDelay:0.02f];
}
Время от времени вы увидите мерцающую линию в один пиксель в верхней части экрана, прежде чем баннер будет скрыт, но в целом этот метод работает достаточно хорошо. Используйте на свой страх и риск и наслаждайтесь!
Кажется, есть способ отключить Game Center, но это не очевидно или не было для меня.
Выйдите из Game Center.
Если вы затем запустите игру Game Center, появится всплывающее окно с предложением снова войти в Game Center.
Вместо входа в систему нажмите кнопку «Отмена» в верхнем левом углу. Затем выйдите из игры и повторяйте, пока не откроете игру и не отмените вход в Game Center три раза.
Появится новое диалоговое окно с вопросом, хотите ли вы отключить Game Center. Запустите игру снова, и больше ничего из Game Center не появится.
Пока это, кажется, сработало для меня. PITA пока хранит молчание.
Попробуй это:
Settings > Notifications > Game Center
Там вы должны увидеть все параметры, связанные с предупреждениями, уведомлениями и т. д., которые вы можете изменить или полностью отключить.
зый