আমরা শুরু করার আগে, আসুন কেবল স্মরণ করিয়ে দিই যে মূল পয়েন্টটি 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;
আপনি বেগুনি আয়তক্ষেত্রের উত্সটি পিতামাতার মতো (কালো আয়তক্ষেত্র) সমান হওয়ার প্রত্যাশা করেন তবে এটি এর অধীনে চলে যায় এবং কেন এটি হয়? কারণ আপনি যখন অন্য দৃশ্যে কোনও ভিউ যুক্ত করবেন তখন সাবভিউ ফ্রেম "ওয়ার্ল্ড" এখন এটি মূল প্যারেন্ট বাউন্ডাক্ট, যদি আপনার মতামত থাকে যে মূল পর্দায় এটির উত্সটি সমস্ত উপদর্শনগুলির জন্য কর্ড (15,15) এ রয়েছে, উপরের বাম কোণে হবে (0,0)
এই কারণেই আপনাকে সর্বদা এটির আবদ্ধ আয়তক্ষেত্র দ্বারা পিতামাতার কাছে উল্লেখ করতে হবে, যা এটির উপভিউগুলির "জগত", এই লাইনটি এখানে ঠিক করতে দিন:
subSubView.frame.origin = subView.bounds.origin;
এবং যাদুটি দেখুন, সাবসউভিউটি এখন এটির মূল উত্সে অবস্থিত:
সুতরাং, আপনি পছন্দ করেন "ঠিক আছে আমি কেবল আমার পিতামাতার দর্শন দ্বারা আমার দৃষ্টিভঙ্গিটি কেন্দ্র করে রাখতে চেয়েছিলাম, বড় বিষয়টি কী?" ভাল, এটি কোনও বড় বিষয় নয়, আপনাকে কেবল পিতৃতান্ত্রিক কেন্দ্রের বিন্দুটি "অনুবাদ" করতে হবে যা এটির মাধ্যমে ফ্রেম থেকে পিতামাতার সীমানা কেন্দ্রে নেওয়া হয়:
subSubView.center = subView.convertPoint(subView.center, fromView: subSubView);
আপনি তাকে প্রকৃতপক্ষে বলছেন "পিতামাতার দর্শন কেন্দ্রটি নিয়ে যান, এবং এটিকে সাবসউভিউ বিশ্বে রূপান্তর করুন"।
এবং আপনি এই ফলাফল পাবেন: