ฉันต้องการเลื่อนมุมมองหนึ่งไปยังอีกมุมมองหนึ่งฉันจะรู้ดัชนี z ของมุมมองได้อย่างไรและจะเลื่อนไปยังมุมมองด้านบนได้อย่างไร
ฉันต้องการเลื่อนมุมมองหนึ่งไปยังอีกมุมมองหนึ่งฉันจะรู้ดัชนี 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];
ดังที่ Kolin Krewinkel กล่าวว่า[parentView bringSubviewToFront:view]
จะนำมุมมองไปสู่ด้านบน แต่นี่เป็นเพียงกรณีที่มุมมองนั้นเป็นพี่น้องกันทั้งหมดในลำดับชั้น
คุณสามารถใช้zPosition
คุณสมบัติของเลเยอร์ของมุมมอง (เป็นCALayer
วัตถุ) เพื่อเปลี่ยนดัชนี z ของมุมมอง
theView.layer.zPosition = 1;
ดังที่Viktor Nordling ได้เพิ่ม "ค่าใหญ่อยู่ด้านบนคุณสามารถใช้ค่าใดก็ได้ที่คุณต้องการรวมถึงค่าลบ" ค่าเริ่มต้นคือ 0
คุณต้องนำเข้า QuartzCore framework เพื่อเข้าถึงเลเยอร์ เพียงเพิ่มรหัสบรรทัดนี้ที่ด้านบนของไฟล์การใช้งานของคุณ
#import "QuartzCore/QuartzCore.h"
zPosition
ทำงานหรือไม่
IB และ Swift
เมื่อกำหนดเลย์เอาท์ที่สีเหลืองเป็นตัวควบคุมและสีแดงสีเขียวและสีน้ำเงินเป็นภาพย่อยของพี่น้องที่เป็นสีเหลือง
เป้าหมายคือการย้ายมุมมองย่อย (สมมติว่าสีเขียว) ขึ้นไปด้านบน
ในเครื่องมือสร้างอินเทอร์เฟซสิ่งที่คุณต้องทำคือการลากมุมมองที่คุณต้องการให้แสดงที่ด้านบนไปด้านล่างของรายการในเค้าร่างเอกสาร
หรือคุณสามารถเลือกมุมมองและจากนั้นในเมนูไปEditor> จัด> ส่งไปด้านหน้า
มีสองวิธีที่แตกต่างกันในการทำสิ่งนี้โดยทางโปรแกรม
วิธีที่ 1
yellowView.bringSubviewToFront(greenView)
วิธีนี้เทียบเท่ากับคำตอบจากโปรแกรม IB ข้างต้น
ใช้งานได้เฉพาะเมื่อการสัมภาษณ์ย่อยเป็นพี่น้องกัน
อาร์เรย์ของ subviews 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)
ในรุ่นเก่าของสวิฟท์) เพื่อให้แน่ใจว่ามันอยู่ด้านบน[parentView bringSubviewToFront:view] ;
หากคุณต้องการทำสิ่งนี้ผ่านตัวสร้างอินเตอร์เฟสของ XCode คุณสามารถใช้ตัวเลือกเมนูในตัวแก้ไข -> การจัดเรียง คุณจะพบ "ส่งไปที่หน้า", "ส่งไปด้านหลัง" เป็นต้น
ภายในมุมมองที่คุณต้องการนำขึ้นไปด้านบน ... (อย่างรวดเร็ว)
superview?.bringSubviewToFront(self)
หากคุณใช้ cocos2d คุณอาจพบปัญหากับ [parentView bringSubviewToFront: view] อย่างน้อยมันก็ไม่ทำงานสำหรับฉัน แทนที่จะส่งมุมมองที่ฉันต้องการไปด้านหน้าฉันส่งมุมมองอื่นกลับคืนมาและนั่นก็เป็นกลอุบาย
[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)];
เราสามารถใช้ zPosition ใน iOS ได้
ถ้าเรามีมุมมองชื่อsalonDetailView
เช่น:@IBOutlet weak var salonDetailView: UIView!
และมี UIView สำหรับGMSMapView
เช่น:@IBOutlet weak var mapViewUI: GMSMapView!
เพื่อแสดงมุมมองSalonDetailViewด้านบนของmapViewUI
ใช้ zPosition ดังนี้
salonDetailView.layer.zPosition = 1