UIView
এবং এর সাবক্লাসগুলির সমস্ত বৈশিষ্ট্য frame
এবং রয়েছে bounds
। পার্থক্য কি?
UIView
এবং এর সাবক্লাসগুলির সমস্ত বৈশিষ্ট্য frame
এবং রয়েছে bounds
। পার্থক্য কি?
উত্তর:
সীমা একটি এর UIView হয় আয়তক্ষেত্র , একটি অবস্থান (X, Y) এবং আকার (প্রস্থ, উচ্চতা) নিজস্ব তুল্য সিস্টেম (0,0) আপেক্ষিক হিসাবে প্রকাশ।
ফ্রেম একটি এর UIView হয় আয়তক্ষেত্র , একটি অবস্থান (X, Y) এবং আকার (প্রস্থ, উচ্চতা) superview এটা মধ্যে অন্তর্ভুক্ত করা হয় আপেক্ষিক হিসাবে প্রকাশ।
সুতরাং, এমন একটি দৃশ্যের কল্পনা করুন যার আকারটি 100x100 (প্রস্থ x উচ্চতা) এর তত্ত্বাবধানের 25,25 (x, y) এ অবস্থিত। নিম্নলিখিত কোডটি এই দর্শনটির সীমা এবং ফ্রেম ছাপিয়েছে:
// This method is in the view controller of the superview
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"bounds.origin.x: %f", label.bounds.origin.x);
NSLog(@"bounds.origin.y: %f", label.bounds.origin.y);
NSLog(@"bounds.size.width: %f", label.bounds.size.width);
NSLog(@"bounds.size.height: %f", label.bounds.size.height);
NSLog(@"frame.origin.x: %f", label.frame.origin.x);
NSLog(@"frame.origin.y: %f", label.frame.origin.y);
NSLog(@"frame.size.width: %f", label.frame.size.width);
NSLog(@"frame.size.height: %f", label.frame.size.height);
}
এবং এই কোডের আউটপুট হল:
bounds.origin.x: 0
bounds.origin.y: 0
bounds.size.width: 100
bounds.size.height: 100
frame.origin.x: 25
frame.origin.y: 25
frame.size.width: 100
frame.size.height: 100
সুতরাং, আমরা দেখতে পাচ্ছি যে উভয় ক্ষেত্রেই আমরা সীমানা বা ফ্রেমের দিকে তাকিয়ে থাকি না কেন প্রেক্ষাপটের প্রস্থ এবং উচ্চতা একই। X এর বিভিন্ন অবস্থানের অবস্থানটি হল ভিউয়ের অবস্থান x সীমাগুলির ক্ষেত্রে, x এবং y স্থানাঙ্ক 0,0 এ থাকে কারণ এই স্থানাঙ্কগুলি ভিউটির সাথে আপেক্ষিক। যাইহোক, ফ্রেম x এবং y স্থানাঙ্কগুলি প্যারেন্ট ভিউয়ের মধ্যে দর্শনের অবস্থানের সাথে তুলনামূলক (যা আমরা আগে বলেছিলাম 25,25 এ ছিল)।
এখানে দুর্দান্ত উপস্থাপনা রয়েছে যা ইউআইভিউগুলি কভার করে। স্লাইডগুলি 1-20 দেখুন যা কেবল ফ্রেম এবং সীমার মধ্যে পার্থক্য ব্যাখ্যা করে না তবে চাক্ষুষ উদাহরণগুলিও দেখায়।
ফ্রেম = পিতামাতার ভিউ এর সমন্বিত সিস্টেমটি ব্যবহার করে একটি দর্শনীয় অবস্থান এবং আকার
সীমানা = তার নিজস্ব সমন্বয় ব্যবস্থা ব্যবহার করে একটি দর্শনের অবস্থান এবং আকার
সাহায্যের আমাকে স্মরণ করার জন্য ফ্রেম , আমি মনে একটি দেয়ালে একটি ছবি ফ্রেম । ছবির ফ্রেম একটি দেখার সীমানার মতো। আমি দেয়ালে যেখানেই ছবিটি স্থির রাখতে পারি। একইভাবে, আমি প্যারেন্ট ভিউয়ের (যেখানে একটি সুপারভিউ নামেও পরিচিত) অভ্যন্তরে যে কোনও জায়গা চাই put পিতামাতার মতামতটি দেওয়ালের মতো। আইওএসের স্থানাঙ্ক ব্যবস্থার উত্সটি বাম দিকে is আমরা ভিউ ফ্রেমের xy স্থানাঙ্ক (0, 0) এ সেট করে সুপারভাইজারের উত্সে আমাদের দৃষ্টিভঙ্গি রাখতে পারি, যা দেওয়ালের একেবারে উপরের অংশে আমাদের ছবিটি ঝুলানোর মতো। এটিকে ডানদিকে সরানো, এক্স বাড়ান, এটিকে নীচে সরানোর জন্য y বৃদ্ধি করুন।
সীমানা স্মরণে রাখতে আমাকে সাহায্য করার জন্য , আমি একটি বাস্কেটবল কোর্টের কথা ভাবি যেখানে কখনও কখনও বাস্কেটবলের সীমা ছাড়িয়ে যায় । আপনি পুরো বাস্কেটবল কোর্ট জুড়ে বলটি ড্রিবল করছেন, তবে আদালত নিজেই কোথায় আছেন তা আপনার সত্যিই যত্ন নেই। এটি কোনও জিমের বাইরে বা বাইরে একটি উচ্চ বিদ্যালয়ে বা আপনার বাড়ির সামনে হতে পারে। এটা কোন ব্যাপার না। আপনি কেবল বাস্কেটবল খেলতে চান একইভাবে, কোনও দৃশ্যের সীমাবদ্ধকরণের জন্য সমন্বিত সিস্টেমটি কেবলমাত্র নিজের দৃষ্টিভঙ্গির যত্ন করে। প্যারেন্ট ভিউতে ভিউটি কোথায় রয়েছে সে সম্পর্কে এটি কিছুই জানে না। সীমাগুলির উত্স (বিন্দু (0, 0) ডিফল্টরূপে) ভিউয়ের শীর্ষ বাম কোণে। এই দৃষ্টিভঙ্গিটির যে কোনও সংক্ষিপ্তসার এই পয়েন্টের সাথে সম্পর্কিত। এটি বাস্কেটবলকে কোর্টের সামনের বাম কোণে নিয়ে যাওয়ার মতো।
আপনি ফ্রেম এবং সীমা তুলনা করার চেষ্টা করার সময় এখন বিভ্রান্তি আসে। যদিও এটি প্রথমে দেখে মনে হচ্ছে ততটা খারাপ নয়। আমাদের বুঝতে সহায়তা করতে কয়েকটি ছবি ব্যবহার করুন।
বাম দিকে প্রথম ছবিতে আমাদের একটি ভিউ রয়েছে যা এর প্যারেন্ট ভিউয়ের উপরের বামে অবস্থিত। হলুদ আয়তক্ষেত্রটি দেখার ফ্রেমের প্রতিনিধিত্ব করে। ডানদিকে আমরা আবার দৃশ্যটি দেখতে পেলাম কিন্তু এবার পিতামাতার ভিউটি প্রদর্শিত হবে না। কারণ সীমানা পিতামাতার ভিউ সম্পর্কে জানে না। সবুজ আয়তক্ষেত্রটি দেখার সীমাটি উপস্থাপন করে। লাল বিন্দু উভয় চিত্র উপস্থাপন করে মূল ফ্রেম বা সীমার।
Frame
origin = (0, 0)
width = 80
height = 130
Bounds
origin = (0, 0)
width = 80
height = 130
সুতরাং ফ্রেম এবং সীমানা ছবিতে ঠিক একই ছিল। আসুন একটি উদাহরণটি দেখুন যেখানে তারা আলাদা।
Frame
origin = (40, 60) // That is, x=40 and y=60
width = 80
height = 130
Bounds
origin = (0, 0)
width = 80
height = 130
সুতরাং আপনি দেখতে পারেন যে ফ্রেমের xy স্থানাঙ্ক পরিবর্তন করা এটি প্যারেন্ট ভিউতে সরিয়ে নিয়েছে। তবে নিজের দেখার বিষয়বস্তুটি এখনও ঠিক একইরকম দেখাচ্ছে। সীমানা কোন ধারণা যে কোন পৃথক আছে।
এখন পর্যন্ত ফ্রেম এবং সীমানা উভয়ের প্রস্থ এবং উচ্চতা হুবহু একই ছিল। যদিও এটি সর্বদা সত্য নয়। যদি আমরা 20 ডিগ্রি ঘড়ির কাঁটার দিকে ঘোরাই তবে কী হবে দেখুন। (রোটেশন ট্রান্সফর্ম ব্যবহার করে করা হয় more আরও তথ্যের জন্য ডকুমেন্টেশন এবং এই ভিউ এবং স্তর উদাহরণগুলি দেখুন))
Frame
origin = (20, 52) // These are just rough estimates.
width = 118
height = 187
Bounds
origin = (0, 0)
width = 80
height = 130
আপনি দেখতে পাচ্ছেন যে সীমাগুলি এখনও একইরকম। তারা এখনও কিছুই জানে না! যদিও ফ্রেমের মানগুলি সমস্ত পরিবর্তিত হয়েছে।
ফ্রেম এবং সীমার মধ্যে পার্থক্যটি দেখতে এখন একটু সহজ, তাই না? আপনি সম্ভবত ফ্রেম এবং সীমানা বোঝেন না নিবন্ধটি একটি ভিউ ফ্রেম হিসাবে সংজ্ঞায়িত করে
... তার দৃষ্টিভঙ্গির মধ্যে সবচেয়ে ছোট বাউন্ডিং বাক্সটি তার পিতামাতার সাথে সমন্বয় ব্যবস্থা সম্পর্কিত দৃষ্টিভঙ্গি, সেই দৃশ্যে প্রয়োগ হওয়া কোনও রূপান্তর সহ।
এটি লক্ষণীয় যে আপনি যদি কোনও দৃশ্যের রূপান্তর করেন তবে ফ্রেমটি সংজ্ঞায়িত হয়ে যায়। সুতরাং প্রকৃতপক্ষে, উপরের চিত্রটিতে ঘোরানো সবুজ সীমানার চারপাশে আমি যে হলুদ ফ্রেমটি আঁকলাম তা আসলে উপস্থিত নেই। এর অর্থ আপনি যদি ঘোরান, স্কেল করেন বা অন্য কোনও রূপান্তর করেন তবে আপনার আর ফ্রেমের মান ব্যবহার করা উচিত নয়। আপনি এখনও সীমা মান ব্যবহার করতে পারেন, যদিও। অ্যাপল ডক্স সতর্ক করে দিয়েছে:
গুরুত্বপূর্ণ: যদি কোনও দৃশ্যের
transform
সম্পত্তিতে পরিচয় রূপান্তর না থাকে তবে সেই দৃশ্যের ফ্রেমটি অপরিজ্ঞাত হয় এবং তাই এর স্বতঃবৃত্তিমূলক আচরণের ফলাফল are
বরং অটোরিসাইজিংয়ের জন্য দুর্ভাগ্য .... যদিও আপনি কিছু করতে পারেন তবে।
transform
আপনার দর্শনটির সম্পত্তি পরিবর্তন করার সময় , সমস্ত রূপান্তরগুলি ভিউয়ের কেন্দ্র বিন্দুটির সাথে সম্পর্কিত হয়।
সুতরাং যদি কোনও রূপান্তর সম্পন্ন হওয়ার পরে আপনার পিতামাতার মধ্যে একটি ভিউ স্থানান্তরিত করার দরকার হয় তবে আপনি view.center
স্থানাঙ্কগুলি পরিবর্তন করে এটি করতে পারেন । পছন্দ করুন frame
, center
প্যারেন্ট ভিউয়ের সমন্বয় ব্যবস্থা ব্যবহার করে।
ঠিক আছে, আসুন আমাদের ঘূর্ণন থেকে মুক্তি এবং সীমানায় ফোকাস করি। এখনও অবধি সীমানা উত্স সর্বদা স্থায়ী হয়েছে (0, 0) যদিও এটি করার দরকার নেই। আমাদের দৃশ্যে যদি একটি বৃহত সাবভিউ থাকে যা সমস্ত একবারে প্রদর্শিত হয় না? আমরা এটি UIImageView
একটি বৃহত চিত্র সহ একটি করব । এখানে আবার আমাদের দ্বিতীয় চিত্রটি রয়েছে, তবে এবার আমরা দেখতে পাব যে আমাদের দৃশ্যের সংক্ষিপ্তসারটি পুরো সামগ্রীটি কেমন দেখাচ্ছে।
Frame
origin = (40, 60)
width = 80
height = 130
Bounds
origin = (0, 0)
width = 80
height = 130
শুধুমাত্র চিত্রের উপরের বাম কোণটি দেখার সীমানার ভিতরে ফিট করতে পারে। এখন দেখুন যদি আমরা সীমাটির মূল স্থানাঙ্কগুলি পরিবর্তন করি তবে কী ঘটে।
Frame
origin = (40, 60)
width = 80
height = 130
Bounds
origin = (280, 70)
width = 80
height = 130
ফ্রেমটি তত্ত্বাবধানে সরানো হয়নি তবে ফ্রেমের অভ্যন্তর সামগ্রী বদলে গেছে কারণ সীমার আয়তক্ষেত্রের উত্স ভিউর ভিন্ন অংশে শুরু হয়। এটি UIScrollView
এবং এর সাবক্লাসগুলির পিছনে পুরো ধারণাটি (উদাহরণস্বরূপ, ক UITableView
)। আরও ব্যাখ্যার জন্য ইউআইএসক্রোলভিউ বোঝা দেখুন ।
যেহেতু frame
কোনও দৃশ্যের প্যারেন্ট ভিউতে তার অবস্থান সম্পর্কিত, আপনি বাহ্যিক পরিবর্তনগুলি করার সময় এর প্রস্থ পরিবর্তন করার বা ভিউ এবং এর প্যারেন্ট ভিউয়ের শীর্ষের মধ্যে দূরত্ব সন্ধান করার মতো ব্যবহার করেন ।
bounds
যখন আপনি অভ্যন্তরীণ পরিবর্তনগুলি করছেন , যেমন জিনিস আঁকতে বা দৃশ্যের মধ্যে সাবউভিউগুলি সাজানোর মতো ব্যবহার করুন । এছাড়াও যদি আপনি এটিতে কোনও স্থানান্তর করেন তবে দৃশ্যের আকার পেতে সীমানাটি ব্যবহার করুন।
অ্যাপল ডকস
সম্পর্কিত স্ট্যাকওভারফ্লো প্রশ্ন
অন্যান্য উৎস
উপরের নিবন্ধগুলি পড়ার পাশাপাশি এটি আমাকে একটি পরীক্ষা অ্যাপ তৈরি করতে অনেক সহায়তা করে। আপনি অনুরূপ কিছু করার চেষ্টা করতে পারেন। (আমি এই ভিডিও কোর্সটি থেকে ধারণা পেয়েছি তবে দুর্ভাগ্যক্রমে এটি নিখরচায় নয়))
আপনার রেফারেন্সের জন্য কোডটি এখানে:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myView: UIView!
// Labels
@IBOutlet weak var frameX: UILabel!
@IBOutlet weak var frameY: UILabel!
@IBOutlet weak var frameWidth: UILabel!
@IBOutlet weak var frameHeight: UILabel!
@IBOutlet weak var boundsX: UILabel!
@IBOutlet weak var boundsY: UILabel!
@IBOutlet weak var boundsWidth: UILabel!
@IBOutlet weak var boundsHeight: UILabel!
@IBOutlet weak var centerX: UILabel!
@IBOutlet weak var centerY: UILabel!
@IBOutlet weak var rotation: UILabel!
// Sliders
@IBOutlet weak var frameXSlider: UISlider!
@IBOutlet weak var frameYSlider: UISlider!
@IBOutlet weak var frameWidthSlider: UISlider!
@IBOutlet weak var frameHeightSlider: UISlider!
@IBOutlet weak var boundsXSlider: UISlider!
@IBOutlet weak var boundsYSlider: UISlider!
@IBOutlet weak var boundsWidthSlider: UISlider!
@IBOutlet weak var boundsHeightSlider: UISlider!
@IBOutlet weak var centerXSlider: UISlider!
@IBOutlet weak var centerYSlider: UISlider!
@IBOutlet weak var rotationSlider: UISlider!
// Slider actions
@IBAction func frameXSliderChanged(sender: AnyObject) {
myView.frame.origin.x = CGFloat(frameXSlider.value)
updateLabels()
}
@IBAction func frameYSliderChanged(sender: AnyObject) {
myView.frame.origin.y = CGFloat(frameYSlider.value)
updateLabels()
}
@IBAction func frameWidthSliderChanged(sender: AnyObject) {
myView.frame.size.width = CGFloat(frameWidthSlider.value)
updateLabels()
}
@IBAction func frameHeightSliderChanged(sender: AnyObject) {
myView.frame.size.height = CGFloat(frameHeightSlider.value)
updateLabels()
}
@IBAction func boundsXSliderChanged(sender: AnyObject) {
myView.bounds.origin.x = CGFloat(boundsXSlider.value)
updateLabels()
}
@IBAction func boundsYSliderChanged(sender: AnyObject) {
myView.bounds.origin.y = CGFloat(boundsYSlider.value)
updateLabels()
}
@IBAction func boundsWidthSliderChanged(sender: AnyObject) {
myView.bounds.size.width = CGFloat(boundsWidthSlider.value)
updateLabels()
}
@IBAction func boundsHeightSliderChanged(sender: AnyObject) {
myView.bounds.size.height = CGFloat(boundsHeightSlider.value)
updateLabels()
}
@IBAction func centerXSliderChanged(sender: AnyObject) {
myView.center.x = CGFloat(centerXSlider.value)
updateLabels()
}
@IBAction func centerYSliderChanged(sender: AnyObject) {
myView.center.y = CGFloat(centerYSlider.value)
updateLabels()
}
@IBAction func rotationSliderChanged(sender: AnyObject) {
let rotation = CGAffineTransform(rotationAngle: CGFloat(rotationSlider.value))
myView.transform = rotation
updateLabels()
}
private func updateLabels() {
frameX.text = "frame x = \(Int(myView.frame.origin.x))"
frameY.text = "frame y = \(Int(myView.frame.origin.y))"
frameWidth.text = "frame width = \(Int(myView.frame.width))"
frameHeight.text = "frame height = \(Int(myView.frame.height))"
boundsX.text = "bounds x = \(Int(myView.bounds.origin.x))"
boundsY.text = "bounds y = \(Int(myView.bounds.origin.y))"
boundsWidth.text = "bounds width = \(Int(myView.bounds.width))"
boundsHeight.text = "bounds height = \(Int(myView.bounds.height))"
centerX.text = "center x = \(Int(myView.center.x))"
centerY.text = "center y = \(Int(myView.center.y))"
rotation.text = "rotation = \((rotationSlider.value))"
}
}
bounds
বনাম frame
একটি দৃশ্য আছে।
নীচে কোড চালানোর চেষ্টা করুন
- (void)viewDidLoad {
[super viewDidLoad];
UIWindow *w = [[UIApplication sharedApplication] keyWindow];
UIView *v = [w.subviews objectAtIndex:0];
NSLog(@"%@", NSStringFromCGRect(v.frame));
NSLog(@"%@", NSStringFromCGRect(v.bounds));
}
এই কোডের আউটপুট হল:
কেস ডিভাইস ওরিয়েন্টেশন হল প্রতিকৃতি
{{0, 0}, {768, 1024}}
{{0, 0}, {768, 1024}}
কেস ডিভাইস ওরিয়েন্টেশন হ'ল ল্যান্ডস্কেপ
{{0, 0}, {768, 1024}}
{{0, 0}, {1024, 768}}
স্পষ্টতই, আপনি ফ্রেম এবং সীমা মধ্যে পার্থক্য দেখতে পারেন
ফ্রেম হ'ল তার সুপার ভিউয়ের সমন্বয় ব্যবস্থাতে ভিউটির উত্স (ওপরে বাম কোণে) এবং এর আকার, এর অর্থ হল আপনি ফ্রেমের উত্স পরিবর্তন করে দৃশ্যের উচ্চতর দৃশ্যে অনুবাদ করেন, অন্যদিকে সীমা তার আকার এবং উত্স নিজস্ব সমন্বিত সিস্টেম, সুতরাং ডিফল্টরূপে সীমা উত্স (0,0) হয়।
বেশিরভাগ সময় ফ্রেম এবং সীমানাগুলি একত্রিত হয় তবে উদাহরণস্বরূপ আপনার ফ্রেম ((140,65), (200,250)) এবং সীমানা ((0,0), (200,250) এর মতামত থাকলে এবং দৃশ্যটি কাত করে দেওয়া হয়েছিল যাতে এটি তার নীচে ডান কোণে দাঁড়িয়ে থাকে, তবে সীমাগুলি এখনও ((0,0), (200,250)) হবে তবে ফ্রেমটি তা নয়।
ফ্রেমটি ক্ষুদ্রতম আয়তক্ষেত্র হবে যা ভিউকে আবদ্ধ / ঘিরে রেখেছে, সুতরাং ফ্রেমটি (ছবির মতো) হবে ((140,65), (320,320))।
আর একটি পার্থক্য উদাহরণস্বরূপ যদি আপনার কাছে এমন সুপারভিউ থাকে যার সীমানা ((0,0), (200,200)) এবং এই সুপারভিউতে একটি সাবভিউ থাকে যার ফ্রেম ((20,20), (100,100)) থাকে এবং আপনি সুপারভিউ সীমানা পরিবর্তন করেন ((20,20), (200,200)) এ, তারপরে সাবভিউ ফ্রেমটি এখনও ((20,20), (100,100)) হবে তবে (20,20) দ্বারা অফসেট করা হয়েছে কারণ এর তত্ত্বাবধানের সমন্বয় ব্যবস্থা (20, 20)।
আমি এই কারো সাহায্য করে আশা করি.
subView
ফ্রেম এর সাথে সম্পর্কিত superView
। superView
কোনও কিছুর সীমানা পরিবর্তন করা মূলটিকে subView
এর সাথে মিলে যায় না superView
।
আমার 5 সেন্ট যোগ করুন।
ফ্রেমটি পিতামাতার দৃশ্যের সাথে প্যারেন্ট ভিউয়ের ভিতরে রাখার জন্য ব্যবহৃত হয়।
বাউন্ডাগুলি ভিউ নিজেই এটির নিজস্ব সামগ্রী স্থাপন করতে ব্যবহার করে (যেমন কোনও স্ক্রোল ভিউ স্ক্রোল করার সময় করে)। ক্লিপটোবাউন্ডও দেখুন । বাউন্ডগুলি ভিউয়ের সামগ্রীটি জুম ইন / আউট করতেও ব্যবহৃত হতে পারে।
সাদৃশ্য:
ফ্রেম ~ টিভি স্ক্রিন
বাউন্ডস ~ ক্যামেরা (জুম, সরানো, ঘোরানো)
উপরের উত্তরগুলি খুব ভালভাবে বাউন্ড এবং ফ্রেমের মধ্যে পার্থক্য ব্যাখ্যা করেছে।
সীমাবদ্ধতা: তার নিজস্ব সমন্বয় ব্যবস্থা অনুযায়ী একটি দর্শন আকার এবং অবস্থান।
ফ্রেম: একটি দৃশ্যের আকার এবং এর সুপারভিউয়ের সাথে সম্পর্কিত অবস্থান।
তারপরে এমন বিভ্রান্তি রয়েছে যে এক্স বাউন্ডের ক্ষেত্রে ওয়াই সর্বদা "0" হবে। এটি সত্য নয় । এটি ইউআইএসক্রোলভিউ এবং ইউআইসি কলিকেশনভিউতেও বোঝা যায়।
যখন সীমাগুলির x, y হয় না 0
আসুন ধরে নেওয়া যাক আমাদের একটি ইউআইএসক্রোলভিউ রয়েছে। আমরা পৃষ্ঠাগুলি প্রয়োগ করেছি। ইউআইএসক্রোলভিউতে 3 টি পৃষ্ঠা রয়েছে এবং এর বিষয়বস্তুর আকারের স্ক্রিন প্রস্থ তিনগুণ হয়েছে (ধরুন স্ক্রিনউইথথ 320)। উচ্চতা স্থির থাকে (ধরে নিই 200)।
scrollView.contentSize = CGSize(x:320*3, y : 200)
উপভিউ হিসাবে তিনটি ইউআইআইমেজভিউ যুক্ত করুন এবং ফ্রেমের x মানটি ঘনিষ্ঠভাবে দেখুন
let imageView0 = UIImageView.init(frame: CGRect(x:0, y: 0 , width : scrollView.frame.size.width, height : scrollView.frame.size.height))
let imageView1 : UIImageView.init( frame: CGRect(x:320, y: 0 , width : scrollView.frame.size.width, height : scrollView.frame.size.height))
let imageView2 : UIImageView.init(frame: CGRect(x:640, y: 0 , width : scrollView.frame.size.width, height : scrollView.frame.size.height))
scrollView.addSubview(imageView0)
scrollView.addSubview(imageView0)
scrollView.addSubview(imageView0)
পৃষ্ঠা 0: যখন স্ক্রোলভিউ 0 পৃষ্ঠায় থাকবে তখন সীমাগুলি হবে (x: 0, y: 0, প্রস্থ: 320, উচ্চতা: 200)
পৃষ্ঠা 1: স্ক্রোল করুন এবং পৃষ্ঠা 1 এ যান।
এখন সীমাগুলি হবে (x: 320, y: 0, প্রস্থ: 320, উচ্চতা: 200)
মনে রাখবেন আমরা এর নিজস্ব সমন্বিত সিস্টেমের প্রতি শ্রদ্ধা রেখে বলেছি। সুতরাং এখন আমাদের স্ক্রোলভিউয়ের "দৃশ্যমান অংশ" এর 320-এ "এক্স" রয়েছে image চিত্রভিউ 1 এর ফ্রেমটি দেখুন।
ইউআইকোলিকেশনভিউয়ের ক্ষেত্রেও একই। কালেকশনভিউতে দেখার সহজতম উপায় হ'ল এটিকে স্ক্রোল করা এবং এর সীমানাগুলি মুদ্রণ / লগ করা এবং আপনি ধারণাটি পাবেন।
উপরের সমস্ত উত্তর সঠিক এবং এটি আমার এই গ্রহণ:
ফ্রেম এবং সীমানার মধ্যে পার্থক্য জানাতে কনসপটস বিকাশকারীকে পড়তে হবে:
- তত্ত্বাবধানের তুলনায় (একটি প্যারেন্ট ভিউ) এটি = এফআরএম এর মধ্যে রয়েছে
- এটির নিজস্ব সমন্বিত সিস্টেমের সাথে সম্পর্কিত, এর উপরিউক্ত অবস্থান = বাউন্ডস নির্ধারণ করে
"সীমা" বিভ্রান্তিকর কারণ এটি এমন ধারণা দেয় যে স্থানাঙ্কগুলি সেই দৃশ্যের অবস্থান যেটির জন্য সেট করা হয়েছে। তবে এগুলি ফ্রেমের ধ্রুবক অনুসারে সম্পর্কযুক্ত এবং সামঞ্জস্য হয়।
ফ্রেম বনাম আবদ্ধ
ফ্রেম = পিতামাতার ভিউ এর সমন্বিত সিস্টেমটি ব্যবহার করে একটি দর্শনীয় অবস্থান এবং আকার
সীমানা = তার নিজস্ব সমন্বয় ব্যবস্থা ব্যবহার করে একটি দর্শনের অবস্থান এবং আকার
একটি দৃশ্য দুটি আয়তক্ষেত্র ব্যবহার করে এর আকার এবং অবস্থান ট্র্যাক করে: একটি ফ্রেম আয়তক্ষেত্র এবং একটি চৌম্বক আয়তক্ষেত্র। ফ্রেম আয়তক্ষেত্রটি তত্ত্বাবধানের সমন্বিত সিস্টেমটি ব্যবহার করে তদারকিতে ভিউটির অবস্থান এবং আকারকে সংজ্ঞায়িত করে। সীমানা আয়তক্ষেত্রটি অভ্যন্তর স্থানাঙ্ক ব্যবস্থাটিকে সংজ্ঞায়িত করে যা উত্স এবং স্কেলিং সহ ভিউয়ের সামগ্রীগুলি আঁকতে ব্যবহৃত হয়। চিত্র 2-1 ফ্রেমে আয়তক্ষেত্রের মধ্যে, বাম দিকে এবং সীমানা আয়তক্ষেত্রের ডানদিকে সম্পর্ক দেখায় ”"
সংক্ষেপে, ফ্রেমটি একটি দৃশ্যের তত্ত্বাবধানের ধারণা এবং সীমানা হল ভিউর নিজস্ব ধারণা। একাধিক সমন্বয় সিস্টেম থাকা, প্রতিটি দর্শনের জন্য একটি, ভিউ হায়ারার্কির অংশ।