আমি একটিতে একটি নতুন পাঠ্য মান সেট করছি UILabel
। বর্তমানে, নতুন পাঠ্যটি ঠিক আছে। তবে, নতুন পাঠ্যটি উপস্থিত হওয়ার পরে আমি কিছু অ্যানিমেশন যুক্ত করতে চাই। আমি ভাবছি নতুন পাঠ্যের চেহারা সঞ্চারিত করতে আমি কী করতে পারি।
আমি একটিতে একটি নতুন পাঠ্য মান সেট করছি UILabel
। বর্তমানে, নতুন পাঠ্যটি ঠিক আছে। তবে, নতুন পাঠ্যটি উপস্থিত হওয়ার পরে আমি কিছু অ্যানিমেশন যুক্ত করতে চাই। আমি ভাবছি নতুন পাঠ্যের চেহারা সঞ্চারিত করতে আমি কী করতে পারি।
উত্তর:
আমি অবাক হই যে এটি কাজ করে, এবং এটি পুরোপুরি কার্যকর হয়!
উদ্দেশ্য গ
[UIView transitionWithView:self.label
duration:0.25f
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
self.label.text = rand() % 2 ? @"Nice nice!" : @"Well done!";
} completion:nil];
সুইফট 3, 4, 5
UIView.transition(with: label,
duration: 0.25,
options: .transitionCrossDissolve,
animations: { [weak self] in
self?.label.text = (arc4random()() % 2 == 0) ? "One" : "Two"
}, completion: nil)
সত্যিকারের ক্রস-দ্রবীভূত রূপান্তরটি অর্জন করতে ( নতুন লেবেলটি ম্লান হয়ে যাওয়ার সময় পুরানো লেবেল ম্লান হয়ে যাচ্ছে), আপনি অদৃশ্য হয়ে যাওয়াতে বিবর্ণ হতে চান না। এটি পাঠ্য অপরিবর্তিত থাকলেও এটি অযাচিত ঝলকানির ফলাফল করবে ।
পরিবর্তে এই পদ্ধতির ব্যবহার করুন:
CATransition *animation = [CATransition animation];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.type = kCATransitionFade;
animation.duration = 0.75;
[aLabel.layer addAnimation:animation forKey:@"kCATransitionFade"];
// This will fade:
aLabel.text = "New"
আরও দেখুন: দুটি সংখ্যার মধ্যে ইউিলাবল পাঠ্য অ্যানিমেট করবেন?
আইওএস 10, 9, 8 এ বিক্ষোভ:
সাথে পরীক্ষিত Xcode 8.2.1 & 7.1 , ObjectiveC উপর 8.0 থেকে আইওএস 10 ।
► পূর্ণ প্রকল্পের ডাউনলোড করতে, অনুসন্ধান তাই-3073520 মধ্যে সুইফট রেসিপি ।
-addAnimation:forKey
সেই লেবেলে একটি একক লেবেল ব্যবহার করেন , তারপরে লেবেলের পাঠ্যটি পরিবর্তন করুন।
কোনও ইউআইএলবেলকে বিবর্ণ করার উপযুক্ত উপায় (বা সেই বিষয়ে কোনও ইউআইভিউ) ব্যবহার করা Core Animation Transition
। এটি ঝলকানি হবে না, বা লিখিত সামগ্রীটি অপরিবর্তিত থাকলে তা কালো হয়ে যাবে f
একটি পোর্টেবল এবং ক্লিন সলিউশন হ'ল Extension
সুইফটে একটি ব্যবহার করা (দৃশ্যমান উপাদানগুলির পরিবর্তনের আগে অনুরোধ করা)
// Usage: insert view.fadeTransition right before changing content
extension UIView {
func fadeTransition(_ duration:CFTimeInterval) {
let animation = CATransition()
animation.timingFunction = CAMediaTimingFunction(name:
CAMediaTimingFunctionName.easeInEaseOut)
animation.type = CATransitionType.fade
animation.duration = duration
layer.add(animation, forKey: CATransitionType.fade.rawValue)
}
}
অনুরোধটি দেখতে এরকম দেখাচ্ছে:
// This will fade
aLabel.fadeTransition(0.4)
aLabel.text = "text"
It গিটহাবের এই সমাধান এবং সুইফ্ট রেসিপিগুলির অতিরিক্ত বিশদটি সন্ধান করুন ।
MIT
লাইসেন্সটি গ্যারান্টি দেয় যে আপনার কোকোপোড সবাই এবং যে কেউ অবাধে ব্যবহার করতে পারবেন।
iOS4 যেহেতু এটি ব্লক দিয়ে স্পষ্টতই করা যেতে পারে:
[UIView animateWithDuration:1.0
animations:^{
label.alpha = 0.0f;
label.text = newText;
label.alpha = 1.0f;
}];
এই কাজটি করার কোডটি এখানে।
[UIView beginAnimations:@"animateText" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:1.0f];
[self.lbl setAlpha:0];
[self.lbl setText:@"New Text";
[self.lbl setAlpha:1];
[UIView commitAnimations];
UILabel এক্সটেনশন সমাধান S
extension UILabel{
func animation(typing value:String,duration: Double){
let characters = value.map { $0 }
var index = 0
Timer.scheduledTimer(withTimeInterval: duration, repeats: true, block: { [weak self] timer in
if index < value.count {
let char = characters[index]
self?.text! += "\(char)"
index += 1
} else {
timer.invalidate()
}
})
}
func textWithAnimation(text:String,duration:CFTimeInterval){
fadeTransition(duration)
self.text = text
}
//followed from @Chris and @winnie-ru
func fadeTransition(_ duration:CFTimeInterval) {
let animation = CATransition()
animation.timingFunction = CAMediaTimingFunction(name:
CAMediaTimingFunctionName.easeInEaseOut)
animation.type = CATransitionType.fade
animation.duration = duration
layer.add(animation, forKey: CATransitionType.fade.rawValue)
}
}
কেবল কল করা ফাংশন দ্বারা
uiLabel.textWithAnimation(text: "text you want to replace", duration: 0.2)
সব টিপস জন্য ধন্যবাদ বলছি। আশা করি এটি দীর্ঘমেয়াদে সহায়তা করবে
উপরের সুইফট আরকিটেক্টের সমাধানটির উত্স 4.2 সংস্করণ (দুর্দান্ত কাজ করে):
// Usage: insert view.fadeTransition right before changing content
extension UIView {
func fadeTransition(_ duration:CFTimeInterval) {
let animation = CATransition()
animation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
animation.type = CATransitionType.fade
animation.duration = duration
layer.add(animation, forKey: CATransitionType.fade.rawValue)
}
}
আবাহন:
// This will fade
aLabel.fadeTransition(0.4)
aLabel.text = "text"
সুইফট ২.০:
UIView.transitionWithView(self.view, duration: 1.0, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: {
self.sampleLabel.text = "Animation Fade1"
}, completion: { (finished: Bool) -> () in
self.sampleLabel.text = "Animation Fade - 34"
})
অথবা
UIView.animateWithDuration(0.2, animations: {
self.sampleLabel.alpha = 1
}, completion: {
(value: Bool) in
self.sampleLabel.alpha = 0.2
})
সুইফট 5 এর সাহায্যে আপনার UILabel
ক্রস দ্রবীভূত অ্যানিমেশন দিয়ে আপনার পাঠ্যের পরিবর্তনগুলিকে অ্যানিমেট করার জন্য আপনি নীচের দুটি প্লেগ্রাউন্ড কোডের নমুনাগুলির মধ্যে একটি চয়ন করতে পারেন ।
UIView
এর transition(with:duration:options:animations:completion:)
ক্লাস পদ্ধতি ব্যবহার করা হচ্ছেimport UIKit
import PlaygroundSupport
class ViewController: UIViewController {
let label = UILabel()
override func viewDidLoad() {
super.viewDidLoad()
label.text = "Car"
view.backgroundColor = .white
view.addSubview(label)
label.translatesAutoresizingMaskIntoConstraints = false
label.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
label.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(toggle(_:)))
view.addGestureRecognizer(tapGesture)
}
@objc func toggle(_ sender: UITapGestureRecognizer) {
let animation = {
self.label.text = self.label.text == "Car" ? "Plane" : "Car"
}
UIView.transition(with: label, duration: 2, options: .transitionCrossDissolve, animations: animation, completion: nil)
}
}
let controller = ViewController()
PlaygroundPage.current.liveView = controller
CATransition
এবং CALayer
এর add(_:forKey:)
পদ্ধতিimport UIKit
import PlaygroundSupport
class ViewController: UIViewController {
let label = UILabel()
let animation = CATransition()
override func viewDidLoad() {
super.viewDidLoad()
label.text = "Car"
animation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
// animation.type = CATransitionType.fade // default is fade
animation.duration = 2
view.backgroundColor = .white
view.addSubview(label)
label.translatesAutoresizingMaskIntoConstraints = false
label.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
label.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(toggle(_:)))
view.addGestureRecognizer(tapGesture)
}
@objc func toggle(_ sender: UITapGestureRecognizer) {
label.layer.add(animation, forKey: nil) // The special key kCATransition is automatically used for transition animations
label.text = label.text == "Car" ? "Plane" : "Car"
}
}
let controller = ViewController()
PlaygroundPage.current.liveView = controller
সুইফট ৪.২ সমাধান (নতুন উত্তরগুলি সংকলনের জন্য answer.০ উত্তর গ্রহণ এবং আপডেট করা)
extension UIView {
func fadeTransition(_ duration:CFTimeInterval) {
let animation = CATransition()
animation.timingFunction = CAMediaTimingFunction(name:
CAMediaTimingFunctionName.easeInEaseOut)
animation.type = CATransitionType.fade
animation.duration = duration
layer.add(animation, forKey: CATransitionType.fade.rawValue)
}
}
func updateLabel() {
myLabel.fadeTransition(0.4)
myLabel.text = "Hello World"
}
সিস্টেমের ডিফল্ট মানগুলি 0.25 duration
এবং .curveEaseInEaseOut এর জন্য timingFunction
অ্যানিমেশন জুড়ে অবিচ্ছিন্নতার জন্য প্রায়শই পছন্দনীয় এবং বাদ দেওয়া যায়:
let animation = CATransition()
label.layer.add(animation, forKey: nil)
label.text = "New text"
যা এই লেখার মতোই:
let animation = CATransition()
animation.duration = 0.25
animation.timingFunction = .curveEaseInEaseOut
label.layer.add(animation, forKey: nil)
label.text = "New text"
এটি একটি সি # ইউআইভিউ এক্সটেনশন পদ্ধতি যা @ সুইফটআর্কিটেক্টের কোডের উপর ভিত্তি করে। যখন অটো বিন্যাস জড়িত থাকে এবং নিয়ন্ত্রণগুলির লেবেলের পাঠ্যের উপর নির্ভর করে স্থানান্তরিত হওয়া দরকার হয়, এই কলিং কোডটি লেবেলের সুপারভাইভটিকে লেবেলের পরিবর্তে রূপান্তর দর্শন হিসাবে ব্যবহার করে। আমি ক্রিয়াটির জন্য আরও লম্বা করে তুলতে ল্যাম্বডা এক্সপ্রেশন যুক্ত করেছি।
public static void FadeTransition( this UIView AView, double ADuration, Action AAction )
{
CATransition transition = new CATransition();
transition.Duration = ADuration;
transition.TimingFunction = CAMediaTimingFunction.FromName( CAMediaTimingFunction.Linear );
transition.Type = CATransition.TransitionFade;
AView.Layer.AddAnimation( transition, transition.Type );
AAction();
}
কলিং কোড:
labelSuperview.FadeTransition( 0.5d, () =>
{
if ( condition )
label.Text = "Value 1";
else
label.Text = "Value 2";
} );
আপনি যদি Swift
দেরি করে এটি করতে চান তবে এটি ব্যবহার করে দেখুন:
delay(1.0) {
UIView.transitionWithView(self.introLabel, duration: 0.25, options: [.TransitionCrossDissolve], animations: {
self.yourLabel.text = "2"
}, completion: { finished in
self.delay(1.0) {
UIView.transitionWithView(self.introLabel, duration: 0.25, options: [.TransitionCrossDissolve], animations: {
self.yourLabel.text = "1"
}, completion: { finished in
})
}
})
}
@ ম্যাট - https://stackoverflow.com/a/24318861/1982051 দ্বারা নির্মিত নিম্নলিখিত ফাংশন ব্যবহার করে :
func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
}
যা এটি সুইফটে 3 তে পরিণত হবে
func delay(_ delay:Double, closure:()->()) {
let when = DispatchTime.now() + delay
DispatchQueue.main.after(when: when, execute: closure)
}
এটি অর্জনের জন্য আরও একটি সমাধান রয়েছে। এটি এখানে বর্ণিত ছিল । ধারণাটি নিম্নলিখিত উপায়ে সাবক্লাসিং UILabel
এবং ওভাররাইডিং action(for:forKey:)
ফাংশন:
class LabelWithAnimatedText: UILabel {
override var text: String? {
didSet {
self.layer.setValue(self.text, forKey: "text")
}
}
override func action(for layer: CALayer, forKey event: String) -> CAAction? {
if event == "text" {
if let action = self.action(for: layer, forKey: "backgroundColor") as? CAAnimation {
let transition = CATransition()
transition.type = kCATransitionFade
//CAMediatiming attributes
transition.beginTime = action.beginTime
transition.duration = action.duration
transition.speed = action.speed
transition.timeOffset = action.timeOffset
transition.repeatCount = action.repeatCount
transition.repeatDuration = action.repeatDuration
transition.autoreverses = action.autoreverses
transition.fillMode = action.fillMode
//CAAnimation attributes
transition.timingFunction = action.timingFunction
transition.delegate = action.delegate
return transition
}
}
return super.action(for: layer, forKey: event)
}
}
ব্যবহারের উদাহরণ:
// do not forget to set the "Custom Class" IB-property to "LabelWithAnimatedText"
// @IBOutlet weak var myLabel: LabelWithAnimatedText!
// ...
UIView.animate(withDuration: 0.5) {
myLabel.text = "I am animated!"
}
myLabel.text = "I am not animated!"