Apa perbedaan antara addSubview
dan insertSubView
metode saat tampilan ditambahkan secara terprogram?
86
Satu-satunya perbedaan adalah di mana tampilan ditambahkan: apakah itu tampilan paling depan ( addSubview:
), atau sebelum subview ke-5, ( insertSubview:atIndex:
) atau jika tepat di belakang subview lain ( insertSubview:aboveSubview:
).
Menggunakan insertSubView:
Anda dapat menentukan indeks, yang menentukan urutan-z tampilan. Tampilan dengan indeks lebih tinggi terletak di atas indeks dengan indeks lebih rendah.
Saya rasa tidak ada perbedaan.
addSubview:
adalah metode sederhana yang nyaman untuksumber
1.addSubview menambahkan subview di array lalu tambahkan di View'slayer
- (void)addSubview:(UIView *)subview { [_subviews addObject:subview]; [_layer addSublayer:subview.layer]; }
}
2. Saat insertSubview menambahkan tampilan Anda sebagai subview lalu panggil
[_layer insertSublayer:subview.layer atIndex:index];
- (void)insertSubview:(UIView *)subview atIndex:(NSInteger)index { [self addSubview:subview]; [_layer insertSublayer:subview.layer atIndex:index]; }
sumber
Cara lain untuk melihat perbedaannya adalah dengan
addSubview
menambahkan subview dengan cara yang menandakan urutan di mana mereka telah ditambahkan ke superview mereka, sedangkaninsertSubview
memungkinkan Anda untuk menambahkan subview dalam urutan yang Anda inginkan untuk "digambar".Ini mungkin tampak sepele atau hanya berkaitan dengan visual yang tumpang tindih, tetapi juga membuat perbedaan dalam hal-hal seperti pengujian hit atau
UIResponder
rantai. Sebagai contoh: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 }
Ini menunjukkan bahwa urutan subview telah dibalik untuk meniru proses traversal pohon pre-order depth-first dari pengujian hit.
sumber