Ответы:
UIView
братья и сестры сложены в том порядке, в котором они добавлены в их суперпредставление. Эти UIView
методы иерархии и свойства существуют для управления видом заказа. В UIView.h:
@property(nonatomic,readonly) UIView *superview;
@property(nonatomic,readonly,copy) NSArray *subviews;
- (void)removeFromSuperview;
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;
- (void)addSubview:(UIView *)view;
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
- (void)bringSubviewToFront:(UIView *)view;
- (void)sendSubviewToBack:(UIView *)view;
Виды одного брата упорядочены задом наперед в subviews
массиве. Итак, самый верхний вид будет:
[parentView.subviews lastObject];
и вид снизу будет:
[parentView.subviews objectAtIndex:0];
Как сказал Колин Крюинкель, [parentView bringSubviewToFront:view]
это приведет представление к вершине, но это только в том случае, если все представления являются братьями и сестрами в иерархии.
Вы можете использовать zPosition
свойство слоя представления (это CALayer
объект), чтобы изменить z-индекс представления.
theView.layer.zPosition = 1;
Как добавил Виктор Нордлинг , «большие значения находятся на вершине. Вы можете использовать любые значения, которые вы хотите, включая отрицательные значения». Значением по умолчанию является 0.
Вам нужно импортировать инфраструктуру QuartzCore для доступа к слою. Просто добавьте эту строку кода вверху вашего файла реализации.
#import "QuartzCore/QuartzCore.h"
zPosition
работу?
IB и Swift
Учитывая текущую схему, где желтый - это супервизор, а красный, зеленый и синий - родственные подвиды желтого,
цель состоит в том, чтобы переместить подпредставление (скажем, зеленое) на вершину.
В Интерфейсном Разработчике все, что вам нужно сделать, это перетащить вид, который вы хотите показать сверху вниз в список в Схеме документов.
Также вы можете выбрать вид, а затем в меню перейти в « Редактор»> «Расположить»> «Отправить на передний план» .
Есть несколько разных способов сделать это программно.
Способ 1
yellowView.bringSubviewToFront(greenView)
Этот метод является программным эквивалентом ответа IB выше.
Это работает, только если подпредставления являются братьями и сестрами друг друга.
Массив подпредставлений содержится в yellowView.subviews
. Здесь bringSubviewToFront
перемещается greenView
из индекса 0
в 2
. Это можно наблюдать с
print(yellowView.subviews.indexOf(greenView))
Способ 2
greenView.layer.zPosition = 1
0
для всех других представлений, результат greenView
выглядит так, как будто он сверху. Тем не менее, он по- прежнему остается на уровне индекса 0
в yellowView.subviews
массиве. Однако это может привести к неожиданным результатам, потому что такие вещи, как события касания, все равно будут сначала идти к представлению с наибольшим индексным номером. По этой причине, может быть, лучше использовать метод 1 выше.zPosition
было бы установить CGFloat.greatestFiniteMagnitude
( CGFloat(FLT_MAX)
в более старых версиях Swift), чтобы убедиться, что он находится на вершине.[parentView bringSubviewToFront:view] ;
В представлении, которое вы хотите вывести на вершину ... (быстро)
superview?.bringSubviewToFront(self)
Если вы используете cocos2d, вы можете увидеть проблему с [parentView takeSubviewToFront: view], по крайней мере, у меня это не сработало. Вместо того, чтобы перенести вид, который я хотел, на передний план, я отправил другие виды назад, и это помогло.
[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)];
Мы можем использовать zPosition в ios
если у нас есть представление с именем salonDetailView,
например:@IBOutlet weak var salonDetailView: UIView!
и иметь UIView для GMSMapView,
например:@IBOutlet weak var mapViewUI: GMSMapView!
Чтобы отобразить View salonDetailView в верхней части карты ViewUI
используйте zPosition, как показано ниже
salonDetailView.layer.zPosition = 1