মানি-ব্যাক গ্যারান্টিযুক্ত, রিইনফোর্সড-কংক্রিট-সলিড উপায় একটি দৃষ্টিভঙ্গিকে সিঙ্ক্রোনালি আঁকতে বাধ্য করার জন্য (কলিং কোডটিতে ফিরে যাওয়ার আগে)CALayer
আপনার UIView
সাবক্লাসের সাথে ইন্টারঅ্যাকশন কনফিগার করা ।
আপনার ইউআইভিউ সাবক্লাসে একটি displayNow()
পদ্ধতি তৈরি করুন যা স্তরটিকে " প্রদর্শনের জন্য কোর্স নির্ধারণ করুন " এবং তারপরে " এটি তৈরি করতে" বলবে :
দ্রুতগতি
/// Redraws the view's contents immediately.
/// Serves the same purpose as the display method in GLKView.
public func displayNow()
{
let layer = self.layer
layer.setNeedsDisplay()
layer.displayIfNeeded()
}
উদ্দেশ্য গ
/// Redraws the view's contents immediately.
/// Serves the same purpose as the display method in GLKView.
- (void)displayNow
{
CALayer *layer = self.layer;
[layer setNeedsDisplay];
[layer displayIfNeeded];
}
draw(_: CALayer, in: CGContext)
এমন একটি পদ্ধতিও প্রয়োগ করুন যা আপনার ব্যক্তিগত / অভ্যন্তরীণ অঙ্কন পদ্ধতিতে কল করবে (যা প্রতিটি UIView
হিসাবে কাজ করে CALayerDelegate
) :
দ্রুতগতি
/// Called by our CALayer when it wants us to draw
/// (in compliance with the CALayerDelegate protocol).
override func draw(_ layer: CALayer, in context: CGContext)
{
UIGraphicsPushContext(context)
internalDraw(self.bounds)
UIGraphicsPopContext()
}
উদ্দেশ্য গ
/// Called by our CALayer when it wants us to draw
/// (in compliance with the CALayerDelegate protocol).
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context
{
UIGraphicsPushContext(context);
[self internalDrawWithRect:self.bounds];
UIGraphicsPopContext();
}
এবং internalDraw(_: CGRect)
ব্যর্থ-নিরাপদ পাশাপাশি আপনার কাস্টম পদ্ধতি তৈরি করুন draw(_: CGRect)
:
দ্রুতগতি
/// Internal drawing method; naming's up to you.
func internalDraw(_ rect: CGRect)
{
// @FILLIN: Custom drawing code goes here.
// (Use `UIGraphicsGetCurrentContext()` where necessary.)
}
/// For compatibility, if something besides our display method asks for draw.
override func draw(_ rect: CGRect) {
internalDraw(rect)
}
উদ্দেশ্য গ
/// Internal drawing method; naming's up to you.
- (void)internalDrawWithRect:(CGRect)rect
{
// @FILLIN: Custom drawing code goes here.
// (Use `UIGraphicsGetCurrentContext()` where necessary.)
}
/// For compatibility, if something besides our display method asks for draw.
- (void)drawRect:(CGRect)rect {
[self internalDrawWithRect:rect];
}
এবং এখনই কেবল কল করুন myView.displayNow()
যখনই আপনার সত্যিকারের আঁকার জন্য এটির প্রয়োজন হবে (যেমন CADisplayLink
কলব্যাক থেকে ) । আমাদের displayNow()
পদ্ধতি বলব CALayer
করার displayIfNeeded()
, যা সিঙ্ক্রোনাস আমাদের ফিরে কল হবে draw(_:,in:)
এবং অঙ্কন না internalDraw(_:)
, কী সরানোর আগে প্রসঙ্গ টানা হচ্ছে সঙ্গে চাক্ষুষ আপডেট।
এই পদ্ধতির @ রবনাপিয়ারের উপরের মতো, তবে কল displayIfNeeded()
করার পাশাপাশি এটির সুবিধাও রয়েছে setNeedsDisplay()
, যা এটি সিঙ্ক্রোনাস করে।
এটি সম্ভব হয়েছে কারণ এসগুলি ড এর স্তরগুলির CALayer
চেয়ে বেশি অঙ্কন কার্যকারিতা প্রকাশ UIView
করে লেআউটের মধ্যে উচ্চ-কনফিগারযোগ্য অঙ্কনের উদ্দেশ্যে স্পষ্টভাবে নকশা করা হয়েছে এবং (কোকোতে অনেকগুলি জিনিস যেমন) নমনীয়ভাবে ব্যবহারের জন্য ডিজাইন করা হয়েছে ( অভিভাবক শ্রেণি হিসাবে, বা একটি প্রতিনিধি হিসাবে, বা অন্যান্য অঙ্কন সিস্টেমের সেতু হিসাবে, বা কেবল তাদের নিজস্ব)। CALayerDelegate
প্রোটোকলের যথাযথ ব্যবহার এই সমস্ত কিছুই সম্ভব করে তোলে।
এর কনফিগারেশন সম্পর্কে আরও তথ্য কোর অ্যানিমেশন প্রোগ্রামিং গাইডের লেয়ার অবজেক্টস সেটআপ করা বিভাগেCALayer
পাওয়া যাবে ।