2013-04-15 4 views
1

У меня странная проблема со сдвигом в UIView в другой, когда вы выходите из другого содержимого.Вызов нескольких [UIVIew setFrame:] в строке не исполняет их всех

Это код:

- (void)moveAddStudentViewIntoSuperView 
{ 
    CGRect viewFrame1 = self.viewThatShoudlDisappear1.frame; 
    CGRect viewFrame2 = self.viewThatShoudlDisappear2.frame; 
    CGRect newFrame = self.viewControllerThatshouldAppear.view.frame; 

    viewFrame1.origin.x = -300; 
    viewFrame2.origin.x = -300; 
    newStudentFrame.origin.x = 0; 

    NSLog(@"\n 1: %@ \n 2: %@ \n 3: %@", self.viewThatShoudlDisappear1, self.viewThatShoudlDisappear2, self.viewControllerThatshouldAppear.view); 

    [self.viewThatShoudlDisappear1 setFrame:viewFrame1]; 
    [self.viewThatShoudlDisappear2 setFrame:viewFrame2]; 
    [self.viewControllerThatshouldAppear.view setFrame:newFrame]; 

    NSLog(@"\n 1: %@ \n 2: %@ \n 3: %@", self.viewThatShoudlDisappear1, self.viewThatShoudlDisappear2, self.viewControllerThatshouldAppear.view); 

} 

(Обычно я делать setFrame с в UIView анимации, но это не имеет значения для этого примера, как это все равно не работает)

Случается, что вид, который должен скользить или, скорее, находится сейчас, находится в (0,0), но другие виды не отходят. И все еще отображаются под новым видом.

Странно, что лог выводит, что все виды находятся в правильном положении. [self.view setNeedsLayout] между вызовами setFrame тоже ничего не меняет, и еще интереснее то, что если я удалю setFrame из нового представления, то исчезающие взгляды действительно исчезнут правильно.

+0

Очевидно, я не был сконцентрирован, когда писал это. Пример кода должен быть правильным. Сожалею. – Phil

+0

Вы пробовали просить их перекрасить? –

ответ

0

Хорошо, поэтому я думаю, что я не совсем понимаю AutoLayout. Из-за tip от Toto я попытался протестировать его под iOS 5 и должен был отключить AutoLayout повсюду, чтобы запустить его.

Он мгновенно работал с iOS 5. После этого я переключился на iOS 6, не активировав AutoLayout снова, и он тоже работал там.

Мое решение: Деактивация AutoLayout в файлах (-ях) XIB.

Но я не могу придумать, как это должно быть поведение по умолчанию. Возможно, я пропустил точку AutoLayout, или это странная ошибка. Как только я поговорю с разработчиками, которые больше в него, я, вероятно, отправлю сообщение об ошибке, если это необходимо.

+0

Мой опыт в том, что автомаршрут * - это странная ошибка. –

0

Существует опечатка в этой строке:

CGRect viewFrame2 = self.viewThatShoudlDisappear1.frame; 

Предположительно, это должно быть:

CGRect viewFrame2 = self.viewThatShoudlDisappear2.frame; 
+0

Спасибо - отредактировал его. Мне пришлось изменить имена var по причинам;) – Phil

0

Я видел странные вещи, как это, когда я случайно использовал UIKit от фона нить. UIKit следует использовать только из основного потока.

Смежные вопросы