Câu trả lời:
UIView
anh chị em được xếp theo thứ tự mà họ được thêm vào giám sát của họ. Các UIView
phương thức và thuộc tính phân cấp có sẵn để quản lý thứ tự xem. Trong 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;
Các khung nhìn anh chị em được sắp xếp trở lại phía trước trong subviews
mảng. Vì vậy, chế độ xem trên cùng sẽ là:
[parentView.subviews lastObject];
và góc nhìn phía dưới sẽ là:
[parentView.subviews objectAtIndex:0];
Giống như Kolin Krewinkel đã nói, [parentView bringSubviewToFront:view]
sẽ đưa tầm nhìn lên hàng đầu, nhưng đây chỉ là trường hợp nếu các lượt xem là tất cả anh chị em trong hệ thống phân cấp.
Bạn có thể sử dụng thuộc zPosition
tính của lớp của khung nhìn (nó là một CALayer
đối tượng) để thay đổi chỉ mục z của khung nhìn.
theView.layer.zPosition = 1;
Như Viktor Nordling đã thêm, "các giá trị lớn được đặt lên hàng đầu. Bạn có thể sử dụng bất kỳ giá trị nào bạn muốn, bao gồm các giá trị âm". Giá trị mặc định là 0.
Bạn cần nhập khung QuartzCore để truy cập lớp. Chỉ cần thêm dòng mã này ở đầu tệp thực hiện của bạn.
#import "QuartzCore/QuartzCore.h"
zPosition
các tác phẩm không?
IB và Swift
Với bố cục trôi chảy trong đó màu vàng là màu giám sát và màu đỏ, màu xanh lá cây và màu xanh lam là những phần anh chị em của màu vàng,
mục tiêu là để di chuyển một khung nhìn phụ (giả sử màu xanh lá cây) lên đầu.
Trong Trình tạo giao diện, tất cả những gì bạn cần làm là kéo chế độ xem bạn muốn hiển thị ở trên cùng xuống cuối danh sách trong Tài liệu phác thảo.
Ngoài ra, bạn có thể chọn chế độ xem và sau đó trong menu, hãy vào Trình chỉnh sửa> Sắp xếp> Gửi tới Mặt trận .
Có một vài cách khác nhau để làm điều này theo chương trình.
Phương pháp 1
yellowView.bringSubviewToFront(greenView)
Phương pháp này tương đương với chương trình của câu trả lời IB ở trên.
Nó chỉ hoạt động nếu các cuộc phỏng vấn là anh em ruột của nhau.
Một mảng của các cuộc phỏng vấn được chứa trong yellowView.subviews
. Ở đây, bringSubviewToFront
di chuyển greenView
từ chỉ mục 0
đến 2
. Điều này có thể được quan sát với
print(yellowView.subviews.indexOf(greenView))
Phương pháp 2
greenView.layer.zPosition = 1
0
dành cho tất cả các chế độ xem khác, kết quả là có greenView
vẻ như nó ở trên cùng. Tuy nhiên, nó vẫn còn ở chỉ số 0
của yellowView.subviews
mảng. Tuy nhiên, điều này có thể gây ra một số kết quả không mong muốn, bởi vì những thứ như sự kiện nhấn sẽ vẫn đi đầu tiên đến chế độ xem với số chỉ mục cao nhất. Vì lý do đó, có thể tốt hơn để đi với Phương pháp 1 ở trên.zPosition
thể được đặt thành CGFloat.greatestFiniteMagnitude
( CGFloat(FLT_MAX)
trong các phiên bản cũ hơn của Swift) để đảm bảo rằng nó nằm trên cùng.[parentView bringSubviewToFront:view] ;
Trong chế độ xem bạn muốn đưa lên đầu ... (nhanh chóng)
superview?.bringSubviewToFront(self)
Nếu bạn đang sử dụng cocos2d, bạn có thể thấy một vấn đề với [ParentView bringSubviewToFront: view], ít nhất là nó không hoạt động với tôi. Thay vì đưa quan điểm tôi muốn ra phía trước, tôi gửi các quan điểm khác trở lại và điều đó đã tạo ra mánh khóe.
[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)];
Chúng tôi có thể sử dụng zPocation trong ios
nếu chúng ta có một khung nhìn có tên salonDetailView,
vd:@IBOutlet weak var salonDetailView: UIView!
Trong trường hợp của tôi xem hình ảnh
và có UIView cho GMSMapView,
vd:@IBOutlet weak var mapViewUI: GMSMapView!
Để hiển thị View salonDetailView phía trên mapViewUI
sử dụng zPocation như dưới đây
salonDetailView.layer.zPosition = 1