ความแตกต่างระหว่าง addSubview และ insertSubview ในคลาส UIView


คำตอบ:


103

ข้อแตกต่างเพียงอย่างเดียวคือการเพิ่มมุมมอง: ไม่ว่าจะเป็นมุมมองด้านหน้าสุด ( addSubview:) หรืออยู่ก่อนมุมมองย่อยที่ 5 ( insertSubview:atIndex:) หรืออยู่หลังมุมมองย่อยอื่น ( insertSubview:aboveSubview:) ทันที


46

การใช้insertSubView:คุณสามารถระบุดัชนีซึ่งกำหนดลำดับ z ของมุมมอง มุมมองที่มีดัชนีสูงกว่าจะอยู่เหนือมุมมองที่มีดัชนีต่ำกว่า


ขอบคุณฉันอยากให้มีความแตกต่างที่เฉพาะเจาะจงในการใช้ฟังก์ชันทั้งสองนี้
Ashwani K

1
นอกเหนือจากความแตกต่างเฉพาะที่ฉันอธิบายไว้ในคำตอบของฉันแล้วก็ไม่มีเลย
Nikolai Ruhe

29

ฉันไม่คิดว่ามีความแตกต่าง addSubview:เป็นวิธีง่ายๆที่สะดวกสำหรับ

[view insertSubview:aView atIndex:[view.subviews count]]

0

1.addSubview เพิ่ม subview ในอาร์เรย์จากนั้นเพิ่มใน View'slayer

- (void)addSubview:(UIView *)subview
{
    [_subviews addObject:subview];
    [_layer addSublayer:subview.layer];
}

}

2. ในขณะที่ insertSubview เพิ่มมุมมองของคุณเป็นมุมมองย่อยแล้วโทร [_layer insertSublayer:subview.layer atIndex:index];

- (void)insertSubview:(UIView *)subview atIndex:(NSInteger)index
{
  [self addSubview:subview];
  [_layer insertSublayer:subview.layer atIndex:index];
}

0

อีกวิธีหนึ่งในการดูความแตกต่างคือการaddSubviewเพิ่มมุมมองย่อยในลักษณะที่แสดงถึงลำดับที่เพิ่มเข้าไปในซูเปอร์วิวในขณะที่insertSubviewคุณสามารถเพิ่มมุมมองย่อยตามลำดับที่คุณต้องการให้ "วาด" ได้

สิ่งนี้อาจดูเป็นเรื่องเล็กน้อยหรือเกี่ยวข้องกับการซ้อนทับของภาพเท่านั้น แต่ยังสร้างความแตกต่างเมื่อพูดถึงสิ่งต่างๆเช่นการทดสอบการโจมตีหรือUIResponderห่วงโซ่ ตัวอย่างเช่น:

override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
    if let hitView = super.hitTest(point, with:event) {
        return hitView
    }
    for subview in self.subviews.reversed() {
        let hitPoint = self.convert(point, to:subview)
        if let hitView = sub.hitTest(hitPoint, with:event) {
            return hitView
        }
    }
    return nil
}

สิ่งนี้แสดงให้คุณเห็นว่าลำดับของมุมมองย่อยถูกย้อนกลับเพื่อเลียนแบบขั้นตอนการส่งผ่านแผนผังต้นไม้ที่สั่งซื้อล่วงหน้าล่วงหน้าในเชิงลึกของการทดสอบ Hit

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.