शुरू करने से पहले, आइए याद दिलाते हैं कि मूल बिंदु CGPoint
एक दृश्य का ऊपरी बाएं कोने है। विचारों और माता-पिता के बारे में समझने के लिए एक महत्वपूर्ण बात।
आइए इस सरल कोड पर एक नज़र डालें, एक दृश्य नियंत्रक जो इसे एक काले वर्ग को देखने के लिए जोड़ता है:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
createDummyView()
super.view.backgroundColor = UIColor.cyanColor();
}
func createDummyView(){
var subView = UIView(frame: CGRect(x: 15, y: 50, width: 50 , height: 50));
super.view.addSubview(subView);
view.backgroundColor = UIColor.blackColor()
}
}
यह इस दृश्य को बनाएगा: काले आयत की उत्पत्ति और केंद्र समान निर्देशांक फिट करते हैं जैसे कि यह माता-पिता हैं
अब चलिए सबवू व्यू को सब व्यू में जोड़ने की कोशिश करते हैं, और सबव्यू को सबव्यू के रूप में एक ही मूल में देते हैं, लेकिन सब व्यू को सब व्यू के एक बच्चे का दृश्य बनाते हैं।
हम यह कोड जोड़ेंगे:
var subSubView = UIView();
subSubView.frame.origin = subView.frame.origin;
subSubView.frame.size = CGSizeMake(20, 20);
subSubView.backgroundColor = UIColor.purpleColor()
subView.addSubview(subSubView)
और यह परिणाम है:
इस लाइन के कारण:
subSubView.frame.origin = subView.frame.origin;
आप बैंगनी आयत की उत्पत्ति के समान होने की उम्मीद करते हैं क्योंकि यह माता-पिता (काली आयत) है, लेकिन यह इसके तहत जाता है, और ऐसा क्यों है? क्योंकि जब आप किसी अन्य दृश्य में एक दृश्य जोड़ते हैं, तो सब व्यू फ्रेम "दुनिया" अब यह मूल BOUND RECTANGLE है, यदि आपके पास एक दृश्य है कि यह मुख्य स्क्रीन पर उत्पन्न हुआ है, तो इसे सब व्यूज के लिए कोर्ड्स (15,15) पर है। ऊपरी बाएं कोने (0,0) होगा
यही कारण है कि आपको हमेशा आयत से बंधे माता-पिता को संदर्भित करने की आवश्यकता होती है, जो कि यह सब-व्यूज की "दुनिया" है, इस लाइन को ठीक करने देता है:
subSubView.frame.origin = subView.bounds.origin;
और जादू देखें, सबस्यूव्यू अब मूल माता-पिता में बिल्कुल स्थित है:
तो, आपको पसंद है "ठीक है, मैं केवल अपने माता-पिता के दृष्टिकोण से अपना दृष्टिकोण केंद्रित करना चाहता था, बड़ी बात क्या है?" ठीक है, यह कोई बड़ी बात नहीं है, आपको बस मूल केंद्र बिंदु को "ट्रांसलेट" करने की ज़रूरत है जो इसे करने के लिए माता-पिता की सीमा केंद्र से फ्रेम में लिया गया है:
subSubView.center = subView.convertPoint(subView.center, fromView: subSubView);
आप वास्तव में उसे "माता-पिता को देखने के केंद्र में ले जाने, और इसे सबसुव्यू वर्ल्ड में बदलने" के लिए कह रहे हैं।
और आपको यह परिणाम मिलेगा: