Программно получить позицию «Z» UIView по сравнению с его братьями и сестрами - PullRequest
1 голос
/ 06 октября 2010

В моем классе есть логика для вставки представлений на определенных уровнях в иерархии.

containerView = [[UIView alloc] init];
shadowView = [[UIView alloc] init];
contentView = [[UIView alloc init];
[containerView addSubview:shadowView];
[containerView insertSubview:contentView belowSubview:shadowView];

Позже по линии они переворачивают их, поэтому теневое представление находится ниже представления содержимого, а не над ним.

// "Flipping" their positions.
[containerView insertSubview:contentView aboveSubview:shadowView];

UIView имеет свойство subviews, возвращающее NSArray, к сожалению, массив не отражает порядок стека представлений.

Я хочу провести модульное тестирование размещения представления по сравнению с его братьями и сестрами. Как я могу это сделать?

Вот пример теста.

- (void)testViewHierarchyFlipping {
   STAssertEquals(containerView, shadowView.superview, nil);
   STAssertEquals(containerView, contentView.superview, nil);
   // Test that shadowView is ABOVE contentView.
}

1 Ответ

1 голос
/ 06 октября 2010

Вы можете проверить свойство containerView.subviews, чтобы определить позицию Z каждого подпредставления.

Элементы в начале массива находятся глубже, чем элементы в конце массива.

Я считаю, что это должно сработать для вашего теста, хотя у меня нет доступа к Xcode, чтобы проверить его правильность на данный момент.

- (void)testViewHierarchyFlipping {
   STAssertEquals(containerView, shadowView.superview, nil);
   STAssertEquals(containerView, contentView.superview, nil);

   // Test that shadowView is ABOVE contentView.
   UIView *topView = (UIView *)[[containerView subviews] lastObject];
   UIView *bottomView = (UIView *)[[containerView subviews] objectAtIndex:0];
   STAssertEquals(shadowView, topView, nil);
   STAssertEquals(contentView, bottomView, nil);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...