CALayer হল iOS-এ গ্রাফিক্যাল লেয়ারের বেস ক্লাস, যা QuartzCore ফ্রেমওয়ার্কের অংশ। iOS-এ প্রতিটি UIView-এর একটি সংশ্লিষ্ট CALayer থাকে যা কন্টেন্ট রেন্ডারিং, অ্যানিমেশন এবং GPU কম্পোজিশন পরিচালনা করে। Apple QuartzCore Documentation, 2025 অনুসারে, CALayer 40-টিরও বেশি অ্যানিমেটেবল প্রপার্টি সমর্থন করে এবং সরাসরি Metal-এর মাধ্যমে কাজ করে। মসৃণ অ্যানিমেশন তৈরি এবং ইন্টারফেস পারফরম্যান্স অপ্টিমাইজ করার জন্য CALayer বোঝা অপরিহার্য।
মূল পয়েন্ট
CALayer হল QuartzCore ফ্রেমওয়ার্কের একটি ক্লাস যা স্ক্রিনের আয়তাকার এলাকার বিটম্যাপ ইমেজ পরিচালনা করে। এটি ভিজ্যুয়াল প্রপার্টি সংরক্ষণ করে: frame, backgroundColor, opacity, shadow, border, transform। UIView-এর বিপরীতে, CALayer টাচ ইভেন্ট হ্যান্ডেল করে না, Auto Layout-এ অংশগ্রহণ করে না এবং এর কোনো view controller লাইফসাইকেল নেই।
আর্কিটেকচারালভাবে, CALayer Core Animation-এর প্রেক্ষাপটে Model প্যাটার্ন বাস্তবায়ন করে। লেয়ার ভিজ্যুয়াল প্রপার্টির অবস্থা সংরক্ষণ করে, যখন Core Animation অ্যানিমেশনের সময় অবস্থার মধ্যে ইন্টারপোলেশন পরিচালনা করে। এই পৃথকীকরণ drawRect-এর মাধ্যমে কন্টেন্ট পুনরায় আঁকার প্রয়োজন ছাড়াই লেয়ার প্রপার্টি অ্যানিমেট করার অনুমতি দেয়।
Apple WWDC 2024 অনুসারে, CALayer-কে Metal-এর মাধ্যমে কাজ করার জন্য পুনরায় লেখা হয়েছিল। আধুনিক রেন্ডারিং পাইপলাইনে তিনটি ধাপ অন্তর্ভুক্ত: Commit (CPU-তে প্রপার্টি আপডেট), Render (CPU-তে GPU কমান্ড জেনারেট), এবং Composite (GPU-তে কমান্ড এক্সিকিউট)। CALayer তিনটি ধাপেই অংশগ্রহণ করে, প্রতিটির জন্য ডেটা সরবরাহ করে।
প্রতিটি লেয়ারে sublayers থাকতে পারে — চাইল্ড লেয়ার যা প্যারেন্টের উপরে রেন্ডার হয়। লেয়ার হায়ারার্কি UIView হায়ারার্কিকে প্রতিফলিত করে কিন্তু এটি থেকে স্বাধীনভাবে বিদ্যমান থাকতে পারে। ডেভেলপাররা CALayer()-এর মাধ্যমে UIView থেকে স্বাধীনভাবে লেয়ার তৈরি করতে পারেন এবং addSublayer-এর মাধ্যমে হায়ারার্কিতে যুক্ত করতে পারেন।
UIView হল CALayer-এর উপরে একটি র্যাপার যা যোগ করে: UIResponder-এর মাধ্যমে টাচ হ্যান্ডলিং, Auto Layout-এ অংশগ্রহণ, storyboard-এ উপস্থাপনা এবং UIViewController-এর সাথে ইন্টিগ্রেশন। CALayer একটি হালকা অবজেক্ট যা বিশুদ্ধভাবে ভিজ্যুয়াল উপাদানের জন্য UIView ছাড়া ব্যবহার করা যেতে পারে।
অনুশীলনে, এর মানে হল যদি কোনো উপাদানের টাচ হ্যান্ডলিং এবং লেআউটের প্রয়োজন না হয়, তবে এটি CALayer হিসেবে বাস্তবায়ন করা যেতে পারে। উদাহরণস্বরূপ, ব্যাকগ্রাউন্ড অ্যানিমেশন, লোডিং ইন্ডিকেটর, আলংকারিক উপাদান — এগুলো UIView-এর ওভারহেড এড়িয়ে CALayer-এর মাধ্যমে আরও দক্ষতার সাথে বাস্তবায়ন করা হয়।
মৌলিক প্রপার্টি-র মধ্যে frame, পজিশনিং, ডিসপ্লে এবং ভিজ্যুয়াল ইফেক্ট অন্তর্ভুক্ত। frame প্যারেন্ট কোঅর্ডিনেটে লেয়ারের আয়তাকার এলাকা নির্ধারণ করে, bounds অভ্যন্তরীণ কোঅর্ডিনেট নির্ধারণ করে, এবং position লেয়ারের কেন্দ্র নির্ধারণ করে। position-এর পরিবর্তন ডিফল্টভাবে ইম্প্লিসিট অ্যানিমেশনের মাধ্যমে অ্যানিমেট হয়।
contents প্রপার্টি সরাসরি বিটম্যাপ কন্টেন্ট সেট করার অনুমতি দেয় — CGImage বা CIImage-এর মাধ্যমে। এটি drawRect-এর মাধ্যমে আঁকার একটি বিকল্প: যদি ইমেজ ইতিমধ্যে প্রস্তুত থাকে, তবে এটি contents-এ পাস করা যেতে পারে, এবং Core Animation অতিরিক্ত প্রসেসিং ছাড়াই এটি রেন্ডার করবে।
অ্যানিমেশনের জন্য CABasicAnimation, CAKeyframeAnimation এবং CATransition ব্যবহার করা হয়। এই সমস্ত ক্লাস CALayer প্রপার্টি কী পাথের মাধ্যমে কাজ করে, যা প্রায় যেকোনো অ্যাট্রিবিউট অ্যানিমেট করার অনুমতি দেয় — position থেকে transform.rotation.z পর্যন্ত।
Apple বেশ কয়েকটি বিশেষায়িত CALayer সাবক্লাস প্রদান করে, প্রতিটি একটি নির্দিষ্ট কাজ সমাধান করে। বেস CALayer-এর পরিবর্তে উপযুক্ত সাবক্লাস বেছে নেওয়া হার্ডওয়্যার ত্বরণের মাধ্যমে উল্লেখযোগ্য পারফরম্যান্স উন্নতি প্রদান করতে পারে।
CAReplicatorLayer কোড ডুপ্লিকেশন ছাড়া পুনরাবৃত্ত প্যাটার্ন তৈরি করার জন্য বিশেষভাবে উপযোগী। উদাহরণস্বরূপ, 10টি বিন্দু বিশিষ্ট একটি লোডিং ইন্ডিকেটর instanceCount = 10 এবং অ্যানিমেশন টাইম অফসেট instanceDelay-সহ একটি CAReplicatorLayer দিয়ে বাস্তবায়ন করা হয়।
CALayer রেন্ডারিং তিনটি ধাপে এগিয়ে যায়। Commit — যখন লেয়ার প্রপার্টি পরিবর্তন হয়, CPU-তে পরিবর্তনের একটি ব্যাচ গঠিত হয়। Render — Core Animation লেয়ার প্রপার্টির উপর ভিত্তি করে CPU-তে Metal কমান্ড জেনারেট করে। Composite — GPU কমান্ড এক্সিকিউট করে এবং ফ্রেমটি স্ক্রিনে আউটপুট করে। সম্পূর্ণ প্রক্রিয়াটি ডিসপ্লে রিফ্রেশ রেটের সাথে সিঙ্ক্রোনাইজ হয়।
একাধিক লেয়ারের কম্পোজিশনের সময়, GPU স্বচ্ছতা, মাস্ক এবং ব্লেন্ডিং মোড বিবেচনা করে সেগুলিকে চূড়ান্ত ইমেজে একত্রিত করে। যদি লেয়ারের opaque = true থাকে, Core Animation কম্পোজিশন অপ্টিমাইজ করে: আলফা ব্লেন্ডিং-এর পরিবর্তে সরল পিক্সেল প্রতিস্থাপন করা হয়, যা উল্লেখযোগ্যভাবে দ্রুত।
Apple Performance Guidelines অনুসারে, CALayer রেন্ডারিং ধীর করার প্রধান কারণগুলি হল: জটিল sublayer হায়ারার্কি (স্ক্রিনে 30-এর বেশি লেয়ার), মাস্ক ব্যবহার (mask প্রপার্টি), shadowPath ছাড়া স্বয়ংক্রিয় ছায়া গণনা, এবং ডায়নামিক লেয়ারের জন্য shouldRasterize-এর অত্যধিক ব্যবহার।
XCode-এর Core Animation Instrument প্রতিটি লেয়ারের রেন্ডারিং সময়, অফস্ক্রিন বাফার গণনা এবং drawRect কল ফ্রিকোয়েন্সি পর্যবেক্ষণ করার অনুমতি দেয়। 60 FPS-এর জন্য সর্বোত্তম রেন্ডারিং সময় CPU-তে 8 ms এবং GPU-তে 8 ms-এর বেশি নয়।
অফস্ক্রিন রেন্ডারিং — স্ক্রিনে প্রদর্শনের আগে একটি মধ্যবর্তী বাফারে লেয়ার রেন্ডার করা। কন্টেন্ট-সহ cornerRadius + masksToBounds, গ্রুপ opacity, মাস্ক এবং shouldRasterize ব্যবহার করার সময় ঘটে। প্রতিটি অফস্ক্রিন পাস 2–5 ms সময় নেয়, তাই অত্যধিক অফস্ক্রিন রেন্ডারিং পারফরম্যান্সের জন্য গুরুত্বপূর্ণ।
অফস্ক্রিন রেন্ডারিং নির্ণয়ের জন্য, Core Animation Instrument-এ Color Offscreen-Rendered টুল ব্যবহার করুন। হলুদ লেয়ার — অফস্ক্রিন, নীল — সরাসরি স্ক্রিন রেন্ডারিং। অফস্ক্রিন পাস কমানো iOS-এ একটি মূল অপ্টিমাইজেশন কৌশল।
প্রথম উদাহরণটি ছায়া তৈরি, কোণ গোল করা এবং বর্ডার-সহ মৌলিক CALayer সেটআপ প্রদর্শন করে। রেন্ডারিং দ্রুত করতে shadowPath স্পষ্টভাবে উল্লেখ করা হয়েছে:
import UIKit
func configureLayer(_ view: UIView) {
let layer = view.layer
layer.cornerRadius = 16
layer.borderWidth = 2
layer.borderColor = UIColor.systemBlue.cgColor
layer.backgroundColor = UIColor.white.cgColor
layer.shadowColor = UIColor.black.cgColor
layer.shadowOpacity = 0.2
layer.shadowOffset = CGSize(width: 0, height: 4)
layer.shadowRadius = 8
layer.shadowPath = UIBezierPath(
roundedRect: view.bounds,
cornerRadius: layer.cornerRadius
).cgPath
}
দ্বিতীয় উদাহরণটি দৃষ্টিকোণ 3D ট্রান্সফর্মেশন-সহ CABasicAnimation-এর মাধ্যমে transform অ্যানিমেশন দেখায়। Y-অক্ষ ঘূর্ণন অ্যানিমেশন একটি কার্ড ফ্লিপ ইফেক্ট তৈরি করে:
let flipAnimation = CABasicAnimation(keyPath: "transform")
var transform = CATransform3DIdentity
transform.m34 = -1.0 / 500.0
transform = CATransform3DRotate(transform, .pi, 0, 1, 0)
flipAnimation.toValue = NSValue(caTransform3D: transform)
flipAnimation.duration = 0.8
flipAnimation.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
cardLayer.add(flipAnimation, forKey: "flip")
তৃতীয় উদাহরণটি ব্যাকগ্রাউন্ড গ্রেডিয়েন্ট তৈরি করতে CAGradientLayer-এর ব্যবহার প্রদর্শন করে। গ্রেডিয়েন্ট GPU-তে রেন্ডার হয় এবং আকার পরিবর্তনের সময় অতিরিক্ত রিসোর্সের প্রয়োজন হয় না:
func addGradient(to view: UIView, colors: [UIColor]) {
let gradient = CAGradientLayer()
gradient.colors = colors.map { $0.cgColor }
gradient.locations = [0.0, 0.5, 1.0]
gradient.startPoint = CGPoint(x: 0.0, y: 0.0)
gradient.endPoint = CGPoint(x: 1.0, y: 1.0)
gradient.frame = view.bounds
view.layer.insertSublayer(gradient, at: 0)
}
সচরাচর জিজ্ঞাসিত প্রশ্ন
UIView হল CALayer-এর উপরে একটি র্যাপার যা টাচ হ্যান্ডলিং, Auto Layout এবং UIViewController ইন্টিগ্রেশন যোগ করে। CALayer শুধুমাত্র ভিজ্যুয়াল উপস্থাপনা এবং অ্যানিমেশনের সাথে কাজ করে, যা এটি বিশুদ্ধভাবে গ্রাফিক্যাল কাজের জন্য হালকা এবং আরও দক্ষ করে তোলে।
40-টিরও বেশি প্রপার্টি, যার মধ্যে position, bounds, frame, opacity, backgroundColor, cornerRadius, transform, shadowOffset, shadowRadius, borderWidth এবং borderColor অন্তর্ভুক্ত। UIView.animate অ্যানিমেশন ব্লকের ভিতরে প্রপার্টি পরিবর্তন করলে অ্যানিমেশন স্বয়ংক্রিয়ভাবে শুরু হয়।
shadowPath সেট করুন — UIBezierPath হিসেবে একটি স্পষ্ট ছায়া রূপরেখা। shadowPath ছাড়া, Core Animation ছায়ার আকার গণনা করতে কন্টেন্ট আলফা চ্যানেল বিশ্লেষণ করে, যার জন্য অতিরিক্ত পাসের প্রয়োজন হয়। shadowPath-সহ, ছায়া কন্টেন্ট বিশ্লেষণ ছাড়াই একটি সরল জ্যামিতিক আকৃতি হিসেবে রেন্ডার হয়।
ইম্প্লিসিট অ্যানিমেশন — UIView.animate ব্লকের বাইরে CALayer-এর অ্যানিমেটেবল প্রপার্টি পরিবর্তন করার সময় স্বয়ংক্রিয় অ্যানিমেশন। ডিফল্ট সময়কাল 0.25 সেকেন্ড। CATransaction.setDisableActions(true)-এর মাধ্যমে নিষ্ক্রিয় করা যেতে পারে বা CATransaction.begin/commit-এর মাধ্যমে কাস্টম সময়কাল সেট করা যেতে পারে।
CAShapeLayer বেশি কার্যকর যখন আপনার একটি ভেক্টর আকৃতি — রেখা, বৃত্ত, বহুভুজ, জটিল পাথ প্রদর্শনের প্রয়োজন হয়। এটি আলাদা র্যাস্টার বাফার তৈরি না করেই GPU-তে পাথ রেন্ডার করে। বেস CALayer পটভূমি, বর্ডার এবং ছায়া-সহ আয়তাকার এলাকার জন্য উপযুক্ত।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন