Я хочу переместить одно представление поверх другого, как узнать индекс z представления и как перейти к началу?
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
Этот метод является программным эквивалентом ответа IB выше.
Это работает, только если подпредставления являются братьями и сестрами друг друга.
Массив подпредставлений содержится в
yellowView.subviews
. ЗдесьbringSubviewToFront
перемещаетсяgreenView
из индекса0
в2
. Это можно наблюдать сСпособ 2
0
для всех других представлений, результатgreenView
выглядит так, как будто он сверху. Тем не менее, он по- прежнему остается на уровне индекса0
вyellowView.subviews
массиве. Однако это может привести к неожиданным результатам, потому что такие вещи, как события касания, все равно будут сначала идти к представлению с наибольшим индексным номером. По этой причине, может быть, лучше использовать метод 1 выше.zPosition
было бы установитьCGFloat.greatestFiniteMagnitude
(CGFloat(FLT_MAX)
в более старых версиях Swift), чтобы убедиться, что он находится на вершине.источник
источник
Если вы хотите сделать это через Интерфейсный Разработчик XCode, вы можете использовать пункты меню под Editor-> Arrangement. Там вы найдете «Отправить на фронт», «Отправить обратно» и т. Д.
источник
В представлении, которое вы хотите вывести на вершину ... (быстро)
источник
Если вы используете cocos2d, вы можете увидеть проблему с [parentView takeSubviewToFront: view], по крайней мере, у меня это не сработало. Вместо того, чтобы перенести вид, который я хотел, на передний план, я отправил другие виды назад, и это помогло.
источник
Мы можем использовать zPosition в ios
если у нас есть представление с именем salonDetailView, например:
@IBOutlet weak var salonDetailView: UIView!
В моем случае см. Изображение
и иметь UIView для GMSMapView, например:
@IBOutlet weak var mapViewUI: GMSMapView!
Чтобы отобразить View salonDetailView в верхней части карты ViewUI
используйте zPosition, как показано ниже
источник
Или используйте это
согласно здесь
источник