MBProgressHUD выбил кусок из середины?
Я изучаю некоторый код, написанный кем-то другим, как часть новой работы, для которой я был нанят. Одна из ошибок, с которыми я сталкиваюсь, заключается в том, что на определенных страницах, когда MBProgressHUD отображается для "Вход в систему" или "Подключение", он получает кусок из середины. Например:
Очевидно, что я ищу что-то вроде этого:
Кажется, что это происходит только тогда, когда приложение возвращается из фона (то есть, когда приложение загружается впервые, когда мы также используем MBProgressHUD
но работает отлично) и только на определенных страницах. Коробка загружается правильно, и примерно через пол оборота индикатора активности появляется эта дыра. Затем он остается таким, пока коробка не исчезнет.
Я бы добавил немного кода, чтобы посмотреть, но, если честно, я не знаю, с чего начать. Я не могу придумать ничего такого, что могло бы выкинуть кусок посередине таким образом, и, как вы можете видеть из прозрачности второго изображения, за индикатором активности, похоже, нет прямоугольника такой формы / размера. это может быть случайно зеленеть.
Я никогда не использовал MBProgressHUD
я раньше, и я никогда не сталкивался с графической ошибкой такого рода. Кто-нибудь знает, что происходит или терпит неудачу, может ли кто-нибудь подсказать мне, что может быть причиной такого поведения?
РЕДАКТИРОВАТЬ:
Ниже приведен код, используемый для добавления индикатора активности в HUD (изнутри MBProgressHUD
объект):
// Update to indeterminate indicator
[self.indicator removeFromSuperview];
self.indicator = nil;
if (IOSVersion >= 8.0 && (DeviceScreenSize().height >= 1136.0 || DeviceScreenSize().width >= 1136.0)) {
self.indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
} else {
self.indicator = MB_AUTORELEASE([[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]);
}
[(UIActivityIndicatorView *)indicator startAnimating];
[self addSubview:indicator];
Это часть большего updateIndicators
метод, но есть существенные моменты: индикатор удаляется (если раньше был другой), затем он добавляется и анимируется. Закомментируйте любой из startAnimating
или же addSubview
линии, и HUD появляется без индикатора активности, но проблема никогда не возникает.
Для меня это звучит так, будто анимация индикатора активности каким-то образом вызывает недостающую часть базового представления. Но с чего бы это? Кто-нибудь слышал о таких вещах раньше?
РЕДАКТИРОВАТЬ 2:
Насколько я могу судить, проблема возникает только на одном ViewController во всем приложении, и все же этот ViewController никогда не ссылается MBProgressHUD
или Индикаторы активности любого вида. И все эти функции находятся в методе AppDelegate applicationDidBecomeActive:
, как показано ниже:
MBProgressHUD* hud = [[MBProgressHUD alloc] initWithWindow:self.window];
[self.window addSubview:hud];
hud.labelText = LocalizedString(@"Logging in...");
[hud showAnimated:YES whileExecutingBlock:^{
User* U = self.SelectedUser;
if (!isEmpty(U)) {
if ([U networkLogin]) {
[self setSelectedUser:U];
if ([U Disabled] != disabledTypesNone) {
[Flurry logEvent:@"Login Failed" withParameters:@{@"Name": U.DisplayName,
@"DeviceID": [@([Device sharedDevice].DeviceID) stringValue],
@"Disabled": [@([U Disabled]) stringValue]}];
ret = NO;
} else {
[Flurry logEvent:@"Login" withParameters:@{@"Name": U.DisplayName,
@"DeviceID": [@([Device sharedDevice].DeviceID) stringValue]}];
[Flurry setUserID:[NSString stringWithFormat:@"%@ - %@", U.EmpID, U.DisplayName]];
}
} else {
ret = NO;
}
}
} completionBlock:^{
[hud removeFromSuperview];
if (!ret) {
[[NSNotificationCenter defaultCenter] postNotificationName:kDisplayLogin object:nil];
} else {
[[NSNotificationCenter defaultCenter] postNotificationName:kLoggedIn object:nil];
}
}];
Поскольку это происходит в AppDelegate, оно должно быть одинаковым во всем приложении, верно? И все же, когда тот же код вызывается (из AppDelegate, как и прежде), когда приложение находится в другом ViewController, оно работает без проблем.
Что может отличать поведение этого метода в разных ViewControllers?