এতে অন্তর্নিহিত অ্যানিমেশনগুলি অক্ষম করা হচ্ছে - [ক্যালায়ার সেটনিডসডিসপ্লেইনরেক্ট:]


137

এর -ড্রেইনকন্টেক্সট: পদ্ধতিতে কিছু জটিল অঙ্কন কোড সহ আমি একটি স্তর পেয়েছি। আমি যে অঙ্কনটি করতে হবে তা হ্রাস করার চেষ্টা করছি, তাই আমি পরিবর্তিত অংশগুলি আপডেট করতে -setNeedsDisplayInRect ব্যবহার করছি। এটি দুর্দান্তভাবে কাজ করছে। যাইহোক, যখন গ্রাফিক্স সিস্টেমটি আমার স্তরটিকে আপডেট করে, এটি ক্রস ফেইড ব্যবহার করে পুরানো থেকে নতুন চিত্রে রূপান্তরিত হয়। আমি এটি তাত্ক্ষণিকভাবে পরিবর্তন করতে চান।

আমি ক্রিয়া বন্ধ করতে এবং সময়কালকে শূন্যতে সেট করতে, এবং কোনওটিই কাজ করতে CATransaction ব্যবহার করার চেষ্টা করেছি। আমি যে কোডটি ব্যবহার করছি তা এখানে:

[CATransaction begin];
[CATransaction setDisableActions: YES];
[self setNeedsDisplayInRect: rect];
[CATransaction commit];

এর পরিবর্তে আমার কি ক্যাটারনসেকশনের একটি আলাদা পদ্ধতি ব্যবহার করা উচিত (আমিও চেষ্টা করেছি -setValue: forKey: kCATransactionDisableAtions, একই ফলাফল সহ)।


আপনি এটি পরবর্তী রান লুপে করতে পারেন: dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ });
হাসেম আবুনাজমি

1
আমার জন্য কাজ করার জন্য আমি নীচে অনেক উত্তর পেয়েছি। অ্যাপল এর একটি স্তরের ডিফল্ট আচরণের নথিটি পরিবর্তন করাও সহায়ক , যা অন্তর্নিহিত পদক্ষেপের সিদ্ধান্ত প্রক্রিয়াটি বিশদভাবে বর্ণনা করে।
urউরোবুর

এটি এটির একটি সদৃশ প্রশ্ন: স্ট্যাকওভারফ্লো.com
রায়ান ফ্রান্সেসকোনি

উত্তর:


172

[NSNull null]উপযুক্ত কীটির জন্য অ্যানিমেশন হিসাবে ফিরে আসতে আপনি স্তরটিতে ক্রিয়া ডিকশনারিটি সেট করে এটি করতে পারেন । উদাহরণস্বরূপ, আমি ব্যবহার করি

NSDictionary *newActions = @{
    @"onOrderIn": [NSNull null],
    @"onOrderOut": [NSNull null],
    @"sublayers": [NSNull null],
    @"contents": [NSNull null],
    @"bounds": [NSNull null]
};

layer.actions = newActions;

আমার স্তরগুলির মধ্যে একটিতে সাবলেয়ারগুলি সন্নিবেশ করানো বা পরিবর্তন করাতে ফিড ইন / আউট অ্যানিমেশনগুলি অক্ষম করতে, পাশাপাশি স্তরটির আকার এবং সামগ্রীতে পরিবর্তন। আমি বিশ্বাস করি যে contentsআপডেট করা অঙ্কনটিতে ক্রসফেইড প্রতিরোধ করার জন্য আপনি কীটি সন্ধান করছেন is


সুইফ্ট সংস্করণ:

let newActions = [
        "onOrderIn": NSNull(),
        "onOrderOut": NSNull(),
        "sublayers": NSNull(),
        "contents": NSNull(),
        "bounds": NSNull(),
    ]

24
ফ্রেম পরিবর্তন করার সময় চলাচল প্রতিরোধ করতে @"position"কীটি ব্যবহার করুন ।
এমএসসিএল

11
এছাড়াও @"hidden"যদি আপনি যেভাবে কোনও স্তরটির দৃশ্যমানতা টগল করে এবং অস্বচ্ছতা অ্যানিমেশনটি অক্ষম করতে চান তবে অ্যাকশন অভিধানেও সম্পত্তি যুক্ত করার বিষয়টি নিশ্চিত হন ।
অ্যান্ড্রু

1
@BradLarson একই ধারণা আমার কিছু সংগ্রামরত পর নিয়ে এসেছেন (ঝ overrode যে actionForKey:পরিবর্তে) আবিষ্কার fontSize, contents, onLayoutএবং bounds। দেখে মনে হচ্ছে আপনি setValue:forKey:পদ্ধতিতে ব্যবহার করতে পারেন এমন কোনও কী নির্দিষ্ট করে দিতে পারেন , যেমন জটিল কী পাথগুলি নির্দিষ্ট করে bounds.size
pqnet

11
প্রকৃতপক্ষে এই 'বিশেষ' স্ট্রিংগুলির কোনও সম্পত্তির প্রতিনিধিত্ব না করার জন্য ধ্রুবক রয়েছে (উদাহরণস্বরূপ @ "অর্ডারআউট" এর জন্য কেসিএঅনআর্ডারআউট) এখানে ভালভাবে নথিবদ্ধ: বিকাশকারী.অ্যাপল.
প্যাট্রিক পিজনাপেল

1
@ বেঞ্জহান কেবল যে কীগুলির সাথে সম্পর্কিত সম্পত্তি নেই সেগুলির স্থির সংজ্ঞা দেওয়া আছে। বিটিডাব্লু, লিঙ্কটি মারা গেছে বলে মনে হচ্ছে, এখানে নতুন ইউআরএল রয়েছে: developer.apple.com/library/mac/docamentation/Cocoa/Concepual/…
প্যাট্রিক পিজনাপেল

89

এছাড়াও:

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];

//foo

[CATransaction commit];

3
আপনি প্রতিস্থাপন করতে পারেন //fooসঙ্গে [self setNeedsDisplayInRect: rect]; [self displayIfNeeded];মূল প্রশ্নের উত্তর দিতে।
কারয়ে লরেঞ্জে

1
ধন্যবাদ! এটি আমাকে আমার কাস্টম ভিউতেও একটি অ্যানিমেটেড পতাকা সেট করতে দেয়। সারণী দর্শন ঘরের মধ্যে ব্যবহারের জন্য সহজ (যেখানে ঘর পুনরায় ব্যবহারের ফলে স্ক্রোল করার সময় কিছু ট্রিপি অ্যানিমেশন হতে পারে)।
জো

3
আমার জন্য পারফরম্যান্স ইস্যুতে বাড়ে, ক্রিয়াগুলি নির্ধারণ করা আরও পারফরম্যান্স
পাসকালিয়াস

26
শর্টহ্যান্ড:[CATransaction setDisableActions:YES]
টাইটানিয়ামডেকয়

7
@ টাইটানিয়ামডেকয় মন্তব্যে যুক্ত করা, যদি কেউ বিভ্রান্ত হয় (আমার মত), [CATransaction setDisableActions:YES]কেবল [CATransaction setValue:forKey:]লাইনের শর্টহ্যান্ড । আপনার এখনও লাইন beginএবং commitরেখা প্রয়োজন ।
হ্লুং

31

আপনি যখন কোনও স্তরের সম্পত্তি পরিবর্তন করেন, CA সাধারণত পরিবর্তনটি সঞ্চারিত করার জন্য একটি অন্তর্নিহিত লেনদেন অবজেক্ট তৈরি করে। আপনি যদি পরিবর্তনটি অ্যানিমেট করতে না চান, আপনি সুস্পষ্ট লেনদেন তৈরি করে এবং এর কেসিএটিআরসিএক্সএবিয়েশনঅ্যাকশন সম্পত্তিটি সত্য করে সেট করে অন্তর্নিহিত অ্যানিমেশনগুলি অক্ষম করতে পারেন ।

উদ্দেশ্য গ

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
// change properties here without animation
[CATransaction commit];

দ্রুতগতি

CATransaction.begin()
CATransaction.setValue(kCFBooleanTrue, forKey: kCATransactionDisableActions)
// change properties here without animation
CATransaction.commit()

6
সেটডিজিয়েবল: একই কাজ করে।
বেন সিনক্লেয়ার

3
এই একটাই সহজ সমাধান যা আমি সুইফটে কাজ করেছি!
জাম্বামান

@ অ্যান্ডির মন্তব্যটি এখন পর্যন্ত এটি করার সর্বোত্তম এবং সহজ উপায়!
Aᴄʜᴇʀᴏɴғᴀɪʟ

23

ব্র্যাড লারসনের উত্তর ছাড়াও : কাস্টম স্তরগুলির জন্য (যা আপনার দ্বারা তৈরি করা হয়েছে) আপনি স্তরটির actionsঅভিধান সংশোধন না করে প্রতিনিধি ব্যবহার করতে পারেন । এই পদ্ধতির আরও গতিশীল এবং আরও অভিনয় হতে পারে। এবং এটি সমস্ত অ্যানিমেটেবল কীগুলি তালিকাভুক্ত না করে সমস্ত অন্তর্নিহিত অ্যানিমেশনগুলি অক্ষম করার অনুমতি দেয়।

দুর্ভাগ্যক্রমে, UIViewকাস্টম লেয়ার প্রতিনিধি হিসাবে এটি ব্যবহার করা অসম্ভব , কারণ প্রত্যেকে UIViewইতিমধ্যে নিজস্ব স্তরের প্রতিনিধি is তবে আপনি এটির মতো একটি সাধারণ সহায়ক শ্রেণি ব্যবহার করতে পারেন:

@interface MyLayerDelegate : NSObject
    @property (nonatomic, assign) BOOL disableImplicitAnimations;
@end

@implementation MyLayerDelegate

- (id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event
{
    if (self.disableImplicitAnimations)
         return (id)[NSNull null]; // disable all implicit animations
    else return nil; // allow implicit animations

    // you can also test specific key names; for example, to disable bounds animation:
    // if ([event isEqualToString:@"bounds"]) return (id)[NSNull null];
}

@end

ব্যবহার (দেখার ভিতরে):

MyLayerDelegate *delegate = [[MyLayerDelegate alloc] init];

// assign to a strong property, because CALayer's "delegate" property is weak
self.myLayerDelegate = delegate;

self.myLayer = [CALayer layer];
self.myLayer.delegate = delegate;

// ...

self.myLayerDelegate.disableImplicitAnimations = YES;
self.myLayer.position = (CGPoint){.x = 10, .y = 42}; // will not animate

// ...

self.myLayerDelegate.disableImplicitAnimations = NO;
self.myLayer.position = (CGPoint){.x = 0, .y = 0}; // will animate

কখনও কখনও দেখার কাস্টম সাবলেয়ার্সের প্রতিনিধি হিসাবে ভিউ এর কন্ট্রোলার রাখা সুবিধাজনক; এই ক্ষেত্রে কোনও সহায়ক শ্রেণীর প্রয়োজন নেই, আপনি actionForLayer:forKey:ঠিক নিয়ামকের ভিতরেই পদ্ধতিটি প্রয়োগ করতে পারেন ।

গুরুত্বপূর্ণ দ্রষ্টব্য: UIViewএর অন্তর্নিহিত স্তরটির প্রতিনিধিটিকে সংশোধন করার চেষ্টা করবেন না (যেমন অন্তর্নিহিত অ্যানিমেশন সক্ষম করতে) - খারাপ জিনিসগুলি ঘটবে :)

দ্রষ্টব্য: আপনি যদি স্তর পুনরায় আঁকতে (অ্যানিমেশন অক্ষম করবেন না) অ্যানিমেট করতে চান তবে এটির [CALayer setNeedsDisplayInRect:]ভিতরে কল করা অসম্পূর্ণ CATransactionকারণ সত্যিকারের পুনরায় আঁকাগুলি কখনও কখনও হতে পারে (এবং সম্ভবত হবে)। এই উত্তরে বর্ণিত হিসাবে কাস্টম বৈশিষ্ট্যগুলি ব্যবহার করা ভাল উপায় ।


এটি আমার পক্ষে কাজ করছে না। এখানে দেখো.
অ্যালেক্সারসন

হুম। এই পদ্ধতির সাথে আমার কোনও সমস্যা হয়নি। লিঙ্কযুক্ত প্রশ্নের কোডটি দেখতে ঠিক আছে এবং সম্ভবত সমস্যাটি অন্য কোনও কোডের কারণে।
স্কোজিন

আহ, আমি দেখতে পাচ্ছি যে আপনি ইতিমধ্যে বাছাই করেছেন যে এটি ভুল ছিল CALayerযা noImplicitAnimationsকাজ থেকে বিরত ছিল । হতে পারে আপনার নিজের উত্তরটি সঠিক হিসাবে চিহ্নিত করা উচিত এবং সেই স্তরটির মধ্যে কী কী ভুল ছিল তা ব্যাখ্যা করুন?
স্কোজিন

আমি কেবল ভুল CALayerদৃষ্টান্ত দিয়ে পরীক্ষা করছিলাম (আমার তখন দুটি ছিল)।
আলেকারসন

1
দুর্দান্ত সমাধান ... তবে প্রোটোকলটি NSNullপ্রয়োগ করে না CAActionএবং এটি এমন কোনও প্রোটোকল নয় যা কেবলমাত্র alচ্ছিক পদ্ধতিতে রয়েছে। এই কোডটি পাশাপাশি ক্র্যাশ হয়ে গেছে এবং আপনি এটির দ্রুত পরিবর্তন করতেও পারবেন না can't আরও ভাল সমাধান: আপনার বিষয়টিকে CAActionপ্রোটোকলের সাথে সামঞ্জস্য করুন (একটি ফাঁকা runActionForKey:object:arguments:পদ্ধতি যা কিছুই করে না) এবং এর selfপরিবর্তে ফিরে আসুন [NSNull null]। একই প্রভাব তবে নিরাপদ (নিশ্চিত হয়ে ক্রাশ হবে না) এবং সুইফটেও কাজ করে।
মক্কি

9

গৃহীত উত্তরের মতো তবে সুইফটের জন্য এখানে আরও কার্যকর সমাধান রয়েছে । কিছু ক্ষেত্রে এটি প্রতিবার যখন আপনি মানটি সংশোধন করেন যা একটি পারফরম্যান্স উদ্বেগ, ততক্ষণে লেনদেন তৈরির চেয়ে ভাল হবে যেমন অন্যরা উল্লেখ করেছেন যেমন 60fps এ স্তর অবস্থানটি টেনে আনার সাধারণ ব্যবহারের ক্ষেত্রে case

// Disable implicit position animation.
layer.actions = ["position": NSNull()]      

স্তর ক্রিয়াগুলি কীভাবে সমাধান করা হয় তার জন্য অ্যাপেলের ডক্স দেখুন । প্রতিনিধি কার্যকর করা ক্যাসকেডে আরও একটি স্তর এড়াতে পারে তবে আমার ক্ষেত্রে এটি প্রতিনিধি সম্পর্কিত ইউআইভিউতে সেট আপ করা দরকার সম্পর্কে সতর্কতার কারণে খুব অগোছালো ছিল ।

সম্পাদনা করুন: মন্তব্যকারীকে NSNullএটির সাথে সামঞ্জস্য করার জন্য আপডেট হওয়া ধন্যবাদ CAAction


একটি তৈরি করার কোন প্রয়োজন নেই NullActionসুইফট জন্য, NSNullকে কনর্ফাম করে CAActionইতিমধ্যে যাতে আপনি একই আপনার উদ্দেশ্য সি না করতে পারেন: layer.actions = [ "অবস্থান": NSNull ()]
user5649358

আমি এই এক সঙ্গে আপনার উত্তর মিলিত আমার চেতক CATextLayer ফিক্স stackoverflow.com/a/5144221/816017
এরিক Zivkovic

আমার প্রকল্পের CALayer লাইনের রঙ পরিবর্তন করার সময় "অ্যানিমেশন" বিলম্বকে বাইপাস করার জন্য আমার প্রয়োজনীয় সমস্যার জন্য এটি দুর্দান্ত সমাধান fix ধন্যবাদ !!
প্লেটরেভারব

স্বল্প ও মধুর! দুর্দান্ত সমাধান!
ডেভিড এইচ

7

স্যামের উত্তর, এবং সাইমন এর অসুবিধার উপর ভিত্তি করে ... CSShapeLayer তৈরি করার পরে প্রতিনিধি রেফারেন্স যুক্ত করুন:

CAShapeLayer *myLayer = [CAShapeLayer layer];
myLayer.delegate = self; // <- set delegate here, it's magic.

... "মি" ফাইলের অন্য কোথাও ...

মূলত কাস্টম "ডিজেবলআইপ্লিকেশন অ্যানিমেশনস" পরিবর্তনশীল বিন্যাসের মাধ্যমে টগল করার ক্ষমতা ছাড়াই স্যামের সমান as "হার্ড-ওয়্যার" পদ্ধতির আরও।

- (id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event {

    // disable all implicit animations
    return (id)[NSNull null];

    // allow implicit animations
    // return nil;

    // you can also test specific key names; for example, to disable bounds animation:
    // if ([event isEqualToString:@"bounds"]) return (id)[NSNull null];

}

7

প্রকৃতপক্ষে, আমি উত্তরটি সঠিক হতে কোনও পাইনি। যে পদ্ধতিটি আমার জন্য সমস্যার সমাধান করে তা হ'ল:

- (id<CAAction>)actionForKey:(NSString *)event {   
    return nil;   
}

তারপরে আপনি নির্দিষ্ট অ্যানিমেশনটি নিষ্ক্রিয় করতে, এতে যা কিছু যুক্তি করতে পারেন, তবে যেহেতু আমি সেগুলি সমস্ত সরিয়ে দিতে চেয়েছিলাম, তাই আমি ফিরে আসলাম না।


5

সুইফটে অন্তর্ভুক্ত স্তর অ্যানিমেশনগুলি অক্ষম করতে

CATransaction.setDisableActions(true)

এই উত্তরের জন্য ধন্যবাদ। disableActions()এটি একই জিনিসটির মতো শোনাচ্ছে বলে আমি প্রথমে ব্যবহার করার চেষ্টা করেছি , তবে এটি বর্তমান মানটি পাওয়া যায়। আমি মনে করি এটি @discardableখুব চিহ্নিত হয়েছে, এটি স্পট করা শক্ত করে তোলে। সূত্র: বিকাশকারী
অস্টিন

5

CATransactionঅভ্যন্তরীণভাবে কীটির setValue:forKey:জন্য কল করে এমনটির মধ্যে ক্রিয়া অক্ষম করার একটি সহজ পদ্ধতি খুঁজে পেয়েছিল kCATransactionDisableActions:

[CATransaction setDisableActions:YES];

সুইফট:

CATransaction.setDisableActions(true)

2

এটি আপনার কাস্টম শ্রেণিতে যুক্ত করুন যেখানে আপনি -ড্রেআরেক্ট () পদ্ধতি প্রয়োগ করছেন। আপনার প্রয়োজনীয়তার স্যুট করতে কোডে পরিবর্তন আনুন, আমার জন্য 'অস্বচ্ছতা' ক্রস ফ্যাড অ্যানিমেশন বন্ধ করার কৌশল করেছিল।

-(id<CAAction>) actionForLayer:(CALayer *)layer forKey:(NSString *)key
{
    NSLog(@"key: %@", key);
    if([key isEqualToString:@"opacity"])
    {
        return (id<CAAction>)[NSNull null];
    }

    return [super actionForLayer:layer forKey:key];
}

1

আপনার যদি কখনও খুব দ্রুত (তবে স্বীকারোক্তিযুক্ত হ্যাকি) সমাধানের প্রয়োজন হয় তবে এটি কেবল (সুইফট) করার উপযুক্ত হতে পারে:

let layer = CALayer()

// set other properties
// ...

layer.speed = 999

3
দয়া করে কখনও এফএফএস করবেন না
m1h4

@ এম 1 এইচ 4 এর জন্য ধন্যবাদ - দয়া করে ব্যাখ্যা করুন কেন এটি একটি খারাপ ধারণা
মার্টিন সিআর

3
কারণ যদি কোনও অন্তর্নিহিত অ্যানিমেশনগুলি বন্ধ করার প্রয়োজন হয় তবে এটি করার জন্য একটি ব্যবস্থা আছে (হয় সাময়িকভাবে অক্ষম কর্মগুলির সাথে একটি সিএ লেনদেন বা স্পষ্টভাবে একটি স্তরের উপর খালি ক্রিয়াগুলি সেট করে)। অ্যানিমেশনের গতিটি কেবল আশানুরূপভাবে উচ্চতর কিছুতে সেট করা তাত্ক্ষণিক কারণে অহেতুক কর্মক্ষমতা ওভারহেডের বোঝা বোঝায় (যা মূল লেখক তার জন্য প্রাসঙ্গিক বলে উল্লেখ করেছেন) এবং বিভিন্ন জাতি-শর্তের সম্ভাবনা (অঙ্কনটি এখনও একটি পৃথক বাফার হিসাবে সম্পন্ন হয়েছে) পরে বিন্দুতে প্রদর্শনটিতে অ্যানিমেটেড হয়ে উঠুন - আপনার মামলার জন্য সুনির্দিষ্ট হতে, 0.25 / 999 সেকেন্ড পরে)।
এম

এটি সত্যিই লজ্জাজনক যা view.layer?.actions = [:]সত্যই কাজ করে না। গতি নির্ধারণ করা কুৎসিত তবে কাজ করে।
tcurdt

1

আইওএসে ম্যাকওএস নয়, কেবলমাত্র একটি অন্তর্নিহিত সম্পত্তি অ্যানিমেশন দ্রুত এবং অক্ষম করার জন্য আপডেট হয়েছে

// Disable the implicit animation for changes to position
override open class func defaultAction(forKey event: String) -> CAAction? {
    if event == #keyPath(position) {
        return NSNull()
    }
    return super.defaultAction(forKey: event)
}

আর একটি উদাহরণ, এই ক্ষেত্রে দুটি অন্তর্নিহিত অ্যানিমেশনগুলি অপসারণ করা।

class RepairedGradientLayer: CAGradientLayer {

    // Totally ELIMINATE idiotic implicit animations, in this example when
    // we hide or move the gradient layer

    override open class func defaultAction(forKey event: String) -> CAAction? {
        if event == #keyPath(position) {
            return NSNull()
        }
        if event == #keyPath(isHidden) {
            return NSNull()
        }
        return super.defaultAction(forKey: event)
    }
}

0

এর মতো আইওএস 7 একটি সুবিধার পদ্ধতি যে শুধু এই আছে আছে:

[UIView performWithoutAnimation:^{
    // apply changes
}];

1
আমি বিশ্বাস করি না যে এই পদ্ধতিটি ক্যালায়ার অ্যানিমেশনগুলিকে অবরুদ্ধ করে
বেনজোহান

1
@ বেঞ্জহান আহ আমি আপনাকে ঠিক বলেছি আগস্টে তেমন কিছুই জানতেন না। আমার এই উত্তরটি মুছে ফেলা উচিত?
ওয়ার্পলিং

:-) আমি কখনই নিশ্চিত নই, দুঃখিত! মন্তব্যগুলি যেভাবেই হোক অনিশ্চয়তা প্রকাশ করে, তাই সম্ভবত এটি ঠিক আছে।
বেনজোহন

0

ক্যাটেক্সটায়ারের স্ট্রিং বৈশিষ্ট্য পরিবর্তন করার সময় বিরক্তিকর (অস্পষ্ট) অ্যানিমেশনটি অক্ষম করতে, আপনি এটি করতে পারেন:

class CANullAction: CAAction {
    private static let CA_ANIMATION_CONTENTS = "contents"

    @objc
    func runActionForKey(event: String, object anObject: AnyObject, arguments dict: [NSObject : AnyObject]?) {
        // Do nothing.
    }
}

এবং তারপরে এটির মতো ব্যবহার করুন (আপনার CATextLayer সঠিকভাবে স্থাপন করতে ভুলবেন না, যেমন সঠিক ফন্ট ইত্যাদি):

caTextLayer.actions = [CANullAction.CA_ANIMATION_CONTENTS: CANullAction()]

আপনি আমার ক্যাটাটেল লাইয়ারের সম্পূর্ণ সেটআপটি এখানে দেখতে পারেন:

private let systemFont16 = UIFont.systemFontOfSize(16.0)

caTextLayer = CATextLayer()
caTextLayer.foregroundColor = UIColor.blackColor().CGColor
caTextLayer.font = CGFontCreateWithFontName(systemFont16.fontName)
caTextLayer.fontSize = systemFont16.pointSize
caTextLayer.alignmentMode = kCAAlignmentCenter
caTextLayer.drawsAsynchronously = false
caTextLayer.actions = [CANullAction.CA_ANIMATION_CONTENTS: CANullAction()]
caTextLayer.contentsScale = UIScreen.mainScreen().scale
caTextLayer.frame = CGRectMake(playbackTimeImage.layer.bounds.origin.x, ((playbackTimeImage.layer.bounds.height - playbackTimeLayer.fontSize) / 2), playbackTimeImage.layer.bounds.width, playbackTimeLayer.fontSize * 1.2)

uiImageTarget.layer.addSublayer(caTextLayer)
caTextLayer.string = "The text you want to display"

আপনি এখন যতটা চান CaTextLayer.string আপডেট করতে পারবেন =)

দ্বারা অনুপ্রাণিত এই , এবং এই উত্তর।


0

এটা চেষ্টা কর.

let layer = CALayer()
layer.delegate = hoo // Same lifecycle UIView instance.

সতর্কতা

আপনি যদি ইউআইটিএবলভিউ দৃষ্টান্তের প্রতিনিধি সেট করেন তবে কখনও কখনও ক্র্যাশ হয় (

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.