У меня есть несколько объектов подкласса uiview внутри основного представления контроллера представления, которые я бесконечно анимирую, вызывая в классе следующий метод:
- (void)hover:(NSNumber *)upDown {
int sense = [upDown intValue];
[UIView animateWithDuration:0.8 delay:0.1 options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction
animations:^{
CGRect frame = self.frame;
frame.origin.y += (sense==1?1:-1) * 5;
self.frame = frame;
}
completion:^(BOOL finished){
[self hover:[NSNumber numberWithInt:(sense==1?0:1)]];
}];
}
Он отлично работает, за исключением того, что на устройстве при нажатии кнопки «Домой» приложение наполовину зависает (приложение в конечном итоге переходит в фоновый режим при многократном нажатии кнопки «Домой» в течение достаточно долгого времени), и любое взаимодействие с другими кнопками перестает работать. В любом другом случае он работает нормально, т. е. пока я не нажимаю кнопку «Домой», я могу перемещаться по контроллерам, нажимать кнопки и т. Д. И на симуляторе.
Есть идеи?
ОБНОВЛЕНИЕ: виновата тень, которую я применяю к анимируемым представлениям.
self.layer.shadowColor = [UIColor blackColor].CGColor;
self.layer.shadowOpacity = 1.0;
self.layer.shadowRadius = 5.0;
Кажется, это вызывает какие-то накладные расходы, которые влияют только на то, что приложение не может перейти в фоновое состояние ???
Кто-нибудь сталкивался с этим?
ОБНОВЛЕНИЕ: В конце концов я решил избавиться от этого кода и нарисовать тень с помощью Quartz в методе drawRect:. Я подозреваю, что проблема может быть связана со снимком, который iPhone делает перед переходом в фоновый режим, и тенью, примененной к слою за пределами границ, но это всего лишь предположение.