Так что я знаю, что в этом есть много вопросов, но насколько я могу судить об этом, это уникальная ситуация, поэтому я решил, что опубликую ее. Надеемся, что это добавит некоторую информацию, которая, наконец, даст нам ответ на вопрос, почему это происходит с нами. Я получаю сообщение об ошибке: wait_fences: не удалось получить ответ: 10004003, когда мое устройство вращается. Анимация моих взглядов инициируются:Только на новом iPad 3: wait_fences: не удалось получить ответ: 10004003
- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
я только получаю ошибку на новом IPad 3. Я использовал ту же самую программу на оригинальном IPad и айфонов, как низко как 3GS , Все они не получают ошибку wait_fences, и все они вращаются быстрее, чем iPad 3.
Я использую Core Graphics почти исключительно для рисования представлений. Я также гарантирую, что они будут перерисовываться при изменении размера, поэтому я не получаю pixilated views. Если я отключу перерисовку при изменении размера, я не получу эту ошибку (но получаю растянутые представления). Если я отключу основной графический чертеж, я не получу ошибку (но, конечно, я получаю черные виды).
Я использовал Time Profiler и обнаружил, что зависание в основном в градиентах рисования:
Я изменил код, чтобы заполнить, а не выдвижные градиентов и делает разрешить эту проблему. Я бы сказал, что градиенты - это проблема, за исключением того, что я делаю эти анимации в других ситуациях (кроме как в ответ на вращение), и это работает отлично.
Я также хотел бы отметить, что я уделил особое внимание тому, чтобы убедиться, что я только анимация видов, которые на самом деле на экране. Я знаю, что анимация просмотров с экрана иногда может вызвать эту ошибку.
Я не включил код анимации
Любые идеи, почему это происходит? Тем более, что это происходит только на iPad 3?
Для тех, кто спросит, это код, который выполняет анимацию. Он обычно будет завернут в блок анимации UIView.
- (void) setFramesForFocusView:(CustomControl *)focusView atX:(CGFloat)x showInput:(BOOL)showInput{
CGSize bSize = self.bounds.size;
CGRect fRect = focusView.frame;
fRect.size.width = bSize.width;
CGRect iRect;
if (focusView.inputViewIsSystemKeyboard){
if (_keyboardRect.origin.y < 0 || _keyboardRect.origin.y >= CGRectGetMaxY(self.bounds) || CGRectIsEmpty(_keyboardRect) || CGRectGetMaxY(_keyboardRect) > CGRectGetMaxY(self.bounds)) return;
iRect = _keyboardRect;
} else {
iRect = (focusView.inputUIView && showInput) ? CGRectMake(0, bSize.height/2, bSize.width, bSize.height/2) : CGRectZero;
}
CGRect iaRect = focusView.inputAccessoryUIView.frame;
CGFloat availableFieldHeight = iRect.origin.y - iaRect.size.height;
iRect.size.width = bSize.width;
iaRect.size.width = bSize.width;
if (!showInput){
iRect.origin.y = bSize.height;
}
iaRect.origin.y = iRect.origin.y - iaRect.size.height;
iRect.origin.x = x;
iaRect.origin.x = x;
focusView.inputUIView.frame = iRect;
focusView.inputAccessoryUIView.frame = iaRect;
if (focusView.expandInput){
fRect.origin.y = 0;
fRect.size.height = availableFieldHeight;
} else {
if (focusView.labelPlacement != LabelPlacementTop && focusView.labelPlacement != LabelPlacementBottom){
fRect.size.height = _currentView.storedFrame.size.height + [focusView.label.text sizeWithFont:focusView.label.font].height;
}
fRect.origin.y = availableFieldHeight - fRect.size.height;
}
if (fRect.size.height > availableFieldHeight){
fRect.origin.y = 0;
fRect.size.height = availableFieldHeight;
}
fRect.origin.x = x;
[focusView setLabelPlacement:LabelPlacementTop toFrame:fRect];
}
Тот факт, что его единственное происшествие на iPad 3 в основном предполагает, что проблема в том, что iPad 3 достаточно быстр, чтобы запускать. Это не означает, что это было правильно на других платформах; только вам повезло на других платформах. Другие ответы, в частности, о несоответствии анимации начала/конца или анимации при выключенном экране, вероятно, по-прежнему применимы. –
Я не могу сказать, насколько это уместно, поскольку у меня мало опыта работы с CoreAnimation, но Марко Армент обсудил специфическую проблему iPad 3 с CA renderInContext, которая вызвана фанкой графическим оборудованием. Обсуждение можно найти на его подкасте [Build and Analyze ep 72] (http://5by5.tv/buildanalyze/72), начиная с 56:20. Я считаю, что iPad медленнее. Может быть, что-то можно почерпнуть? – Swizzlr
@RobNapier Да, ты оказался прав.Я трачу так много времени, чтобы убедиться, что мой текущий контроллер только анимировал экранные представления. Я никогда не думал, что другие контроллеры представлений могут делать свои собственные анимации. –