শিরোনাম আপডেট করার সময় কীভাবে ইউআইবাটনকে ঝলকানি থেকে আটকাতে হবে


85

আমি যখন কোনও ইউআইবাটনটিতে সেটটিটল কল করি তখন বোতামটি আইওএস 7.. এ জ্বলজ্বল করে my

[myButton setTitle:[[NSUserDefaults standardUserDefaults] stringForKey:@"elapsedLabelKey"] forState:UIControlStateNormal];

myButton.highlighted = NO;

আমি শিরোনামগুলি আপডেট করে এমন টাইমারটি কীভাবে সেট আপ করব তা এখানে:

- (void)actionTimer {
    if (myTimer == nil) {

        myTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0
                        target: self
                        selector: @selector(showActivity)
                        userInfo: nil
                        repeats: YES];
    }
}

এখানে এমন পদ্ধতি যা আসলে শিরোনামগুলি আপডেট করে:

- (void)showActivity {

    NSString *sym = [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol];

    if (pauseInterval == nil) {

        // Update clock
        seconds = [[NSDate date] timeIntervalSinceDate:startInterval] - breakTime;

        // Update total earned
        secRate = rate.value / 60 / 60;
        total = secRate * seconds;
        [totalLabel setTitle:[NSString stringWithFormat:@"%@%.4f",sym,total] forState:UIControlStateNormal];

        days = seconds / (60 * 60 * 24);
        seconds -= days * (60 * 60 * 24);
        int hours = seconds / (60 * 60);
        fhours = (float)seconds / (60.0 * 60.0);
        seconds -= hours * (60 * 60);
        int minutes = seconds / 60;
        seconds -= minutes * 60;

        // Update the timer clock
        [elapsed setTitle:[NSString stringWithFormat:@"%.2i:%.2i:%.2i:%.2i",days,hours,minutes,seconds] forState:UIControlStateNormal];
    }
}

এটি ঝলকানি করা উচিত নয়। আপনি কি ব্যাকগ্রাউন্ড থ্রেডে এটি করার চেষ্টা করছেন?
বার্গকুইস্টার

হ্যাঁ প্রতি সেকেন্ডে বোতামের শিরোনাম আপডেট করার জন্য এটি টাইমার সেট করা হচ্ছে (যা আমি মনে করি এটি নিজস্ব থ্রেড তৈরি করে)
ফিয়ার্সমনকি

আপনি যদি সেটাকে সেট আপ করেন তবে টাইমারগুলি কেবল আলাদা থ্রেডে চালিত হয়। শিরোনামটি আপডেট হয়ে যায় এবং আপনি কীভাবে টাইমার সেট আপ করেন সেই পদ্ধতিটি আমরা কী দেখতে পারি?
বার্গকুইস্টার

আমি অনুরোধকৃত কোডটি মূল প্রশ্নের সাথে যুক্ত করেছি
ফিয়ার্সমনকি

উত্তর:


208

বোতামের ধরনটি ইউআইবাটন টাইপকাস্টম এ সেট করুন এবং এটি ফ্ল্যাশিং বন্ধ করবে


16
এটি সত্যই পছন্দসই উত্তর হওয়া উচিত। সহজ সমাধান। এবং এটি কাজ করছে।
জোহান কার্লসন

4
রাজি। আমি অন্যান্য অনেকগুলি সমাধানের চেষ্টা করেছি এবং এটি নিজে থেকে নিজেই এই জিনিসটি করেছে।
বিবিকিউ স্টিভ

4
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এখন পর্যন্ত সহজ সমাধান।
মাচাদো

4
একটি যাদুমন্ত্র মত কাজ করে! ধন্যবাদ

4
আমি মনে করি এটির জন্য কোনও কোড না লিখে এটি একটি ভাল সমাধান।
চৌইয়ান

58

[UIView setAnimationsEnabled:NO]অন্যান্য অ্যানিমেশনগুলিকে প্রভাবিত করতে পারে তার চেয়ে আরও ভাল পন্থা কেবলমাত্র নির্দিষ্ট শিরোনাম অ্যানিমেশনটি অক্ষম করা।

উদ্দেশ্য গ:

[UIView performWithoutAnimation:^{
  [myButton setTitle:text forState:UIControlStateNormal];
  [myButton layoutIfNeeded];
}];

দ্রুত:

UIView.performWithoutAnimation { 
    myButton.setTitle(text, for: .normal)
    myButton.layoutIfNeeded()
}

সবেমাত্র সাম্প্রতিক আইওএস-এ সুইফট সমাধানটি চেষ্টা করে দেখিয়েছেন - দুর্দান্ত কাজ করে।
রোনেন রবিনোভিচি

4
দিন ত্রাণকর্তা। চিয়ার্স!
pkc456

এটি কেবল সুইফ্ট 3-এ চেষ্টা করেছে এবং এটি লেআউটআইফনেড ()
ব্যবহারকারীর 1898712

4
এটি কোনও সন্দেহ ছাড়াই গ্রহণযোগ্য উত্তর হওয়া উচিত!
জুলিয়াস

4
এটি করার সেরা উপায় এটি। দুর্দান্ত উত্তর!

29

* দয়া করে নোট করুন *

_ বাটনের " বাটনটাইপ " যখন " ইউআইবাটন টাইপ সিস্টেম" হয় , নীচের কোডটি অবৈধ

[UIView setAnimationsEnabled:NO];
[_button setTitle:@"title" forState:UIControlStateNormal];
[UIView setAnimationsEnabled:YES];

_ বাটনের " বাটনটাইপ " যখন " ইউআইবাটন টাইপকাস্টম" হয় , উপরের কোডটি বৈধ হয়


19

শিরোনাম পরিবর্তনে অযাচিত UIButton অ্যানিমেশনটি কীভাবে বন্ধ করবেন তা থেকে প্রতিক্রিয়াগুলি দেখুন ? :

[UIView setAnimationsEnabled:NO];
[elapsed setTitle:[NSString stringWithFormat:@"%.2i:%.2i:%.2i:%.2i",days,hours,minutes,seconds] forState:UIControlStateNormal];
[UIView setAnimationsEnabled:YES];

7
একটি কল যোগ করার চেষ্টা @FierceMonkey layoutIfNeeded: [elapsed layoutIfNeeded];। এটি আমার ক্ষেত্রে চোখের পলকে সরিয়ে দেয়।
ক্লাস

4
লেআউটআইফনেডটি আমার জন্য এটি করেছে।
কওলিন ফায়ার

এটি একটি বরং নোংরা কাজ বলে মনে হচ্ছে, তবে layoutIfNeededএটি কাজ করছে বলে মনে হবে
প্রেজেমেসো র্র্যাসেসিস্কি

7

ভবিষ্যতের সহজ ব্যবহারের জন্য আপনি কেবল ইউআইবুটনের জন্য অন্য একটি কার্য সম্পাদন করতে পারেন।

extension UIButton {
    func setTitleWithoutAnimation(_ title: String?, for controlState: UIControlState) {
        UIView.performWithoutAnimation {
            self.setTitle(title, for: controlState)
            self.layoutIfNeeded()
        }
    }
}

হ্যাঁ, ওটাই!

এবং শুধু শিরোনাম তোমার আগে কিন্তু প্রতিস্থাপন করবে হিসাবে সেট setTitleসঙ্গেsetTitleWithoutAnimation


6

ডিফল্ট "সেটটাইটেল" আচরণ অবশ্যই ঘৃণ্য!

আমার সমাধানটি হ'ল:

[UIView setAnimationsEnabled:NO];
[_button layoutIfNeeded]; 
[_button setTitle:[NSString stringWithFormat:@"what" forState:UIControlStateNormal];
[UIView setAnimationsEnabled:YES];

এছাড়াও, স্টোরিবোর্ডে, বোতামের সম্পত্তি নীচে আমি চেক করি:

  • হাইলাইটের বিপরীতে
  • হাইলাইট অ্যাডজাস্ট ইমেজ

এবং পরীক্ষা করুন:

  • অক্ষম সামঞ্জস্য চিত্র

আইওএস 8- তেও পরীক্ষিত এবং কাজ করা ।

আপডেট - সুইফ্ট

আমি আপনাকে আপনার কাস্টম বোতামটি তৈরি করতে এবং সেটটাইটেল পদ্ধতিটিকে ওভাররাইড করার পরামর্শ দিচ্ছি ।

class UnflashingButton: UIButton {
   
    override func setTitle(title: String?, forState state: UIControlState) {
        UIView.setAnimationsEnabled(false)
        self.layoutIfNeeded()
        super.setTitle(title, forState: state)
        UIView.setAnimationsEnabled(true)
    }

}

আমি এই পদ্ধতির চেষ্টা করেছি (সাবক্ল্যাসিং, ওভাররাইডিং সেটটাইটেল: ফোরস্টেট: এবং ইউআইভিউ.সেটঅনিমেশনএনবল করা-সক্ষম করা)। আইওএস 9 এবং 10 বিটাতে আমার পক্ষে কাজ করছেন না। এটি যদি আমি কেবল অ্যানিমেশনগুলি অক্ষম করি তবে এটি কাজ করে তবে তারপরে সেগুলি প্রতিটি
ইউআইভিউয়ের

2

এটি ব্যবহার করে দেখুন, এটি আইওএসের নতুন সংস্করণগুলিতে কাজ করে:

class CustomButtonWithNoEffect : UIButton {
    override func setTitle(_ title: String?, for state: UIControlState) {
        UIView.performWithoutAnimation {
            super.setTitle(title, for: state)
            super.layoutIfNeeded()
        }
    }

}

0

আমি কোডিং এবং স্ট্যাকওভারফ্লোতে নতুন, তাই https://stackoverflow.com/users/4673064/daniel-tseng চমৎকার উত্তরের উপর সরাসরি প্রসারণ করার জন্য সরাসরি মন্তব্য করার মতো খ্যাতি নেই । সুতরাং আমাকে নিজের নতুন উত্তর লিখতে হবে, এবং এটি হ'ল:

extension UIButton {
    func setTitleWithoutAnimation(_ title: String?, for controlState: UIControlState) {
        UIView.performWithoutAnimation {
            self.setTitle(title, for: controlState)
            self.layoutIfNeeded()
        }
    }
}

দুর্দান্ত কাজ করে, ছাড়ুন:

যদি আমার সেটগুলি "setTitleWithoutAnimation" কোডে পরে প্রেরক নির্দিষ্ট না করে, তবে আমি কোরিমিডিয়া বা কোরডাটা সম্পর্কিত এই অদ্ভুত বার্তাগুলি পেয়েছি, যেমন, "2526 থেকে কোরিমিডিয়া অনুমতি পাওয়ার ক্ষেত্রে ব্যর্থ হয়েছে: (নাল)"

কোডিং এবং আইওএসের পক্ষে এটি সম্ভবত বেশ বেসিক, তবে নতুন কোডার হিসাবে আমার জন্য এটি একটি খরগোশের ট্রেইলে কিছুক্ষণের জন্য পাঠিয়েছিল, যেমন: আজ এক্সটেনশান কোরিমিডিয়া অনুমতিগুলির অধিকার পেতে ব্যর্থ হয়েছে , যেখানে মানুষের আকর্ষণীয় উত্তর রয়েছে তবে তা তা করেনি NOT আমার সমস্যার মূলে পৌঁছো

সুতরাং আমি শেষ পর্যন্ত দেখতে পেলাম যে আমাকে আমার প্যারামিটার-কম ফাংশনগুলির প্যারামিটারগুলি দিতে হবে, অর্থাত আমাকে একটি প্রেরক নির্দিষ্ট করতে হয়েছিল। সেই প্রেরকটি ইউআইবাটন, যে কোনও বা যেকোনওবজেক্ট হতে পারে। এই সমস্ত কাজ করেছে, তবে শেষ পর্যন্ত "স্ব" এর সাথে একটি বোতাম এক্সটেনশন যুক্ত করার এবং পরে কোনও বোতাম এটি ব্যবহার করছে কিনা তা নির্দিষ্ট করে বলা না হওয়ার মধ্যে দ্বন্দ্ব দেখা দেয়।

আবার, সম্ভবত প্রাথমিক, তবে আমার কাছে নতুন, তাই আমি অনুভব করেছি যে এটি ভাগ করে নেওয়া ভাল।


0

অন্য কৌশল

@IBOutlet private weak var button: UIButton! {
    didSet {
        button.setTitle(title, for: .normal)
    }
}

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

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