আপনার প্রয়োজন অনুসারে সুইফ্ট 5 এবং আইওএস 12.3 এর সাহায্যে, আপনার সমস্যা সমাধানের জন্য আপনি নিম্নলিখিত 3 টি উপায়ের মধ্যে একটি চয়ন করতে পারেন।
# 1। UIView
এর animate(withDuration:animations:)
ক্লাস পদ্ধতি ব্যবহার করা হচ্ছে
animate(withDuration:animations:)
নিম্নলিখিত ঘোষণা আছে:
নির্দিষ্ট সময়কাল ব্যবহার করে এক বা একাধিক মতামতে পরিবর্তন অ্যানিমেট করুন।
class func animate(withDuration duration: TimeInterval, animations: @escaping () -> Void)
নীচের প্লেগ্রাউন্ড কোডটি animate(withDuration:animations:)
একটি স্বতঃ লেআউট সীমাবদ্ধতার ধ্রুবক পরিবর্তন অ্যানিমেট করার জন্য একটি কার্যকর বাস্তবায়ন দেখায় ।
import UIKit
import PlaygroundSupport
class ViewController: UIViewController {
let textView = UITextView()
lazy var heightConstraint = textView.heightAnchor.constraint(equalToConstant: 50)
override func viewDidLoad() {
view.backgroundColor = .white
view.addSubview(textView)
textView.backgroundColor = .orange
textView.isEditable = false
textView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
textView.translatesAutoresizingMaskIntoConstraints = false
textView.topAnchor.constraint(equalToSystemSpacingBelow: view.layoutMarginsGuide.topAnchor, multiplier: 1).isActive = true
textView.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor).isActive = true
textView.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor).isActive = true
heightConstraint.isActive = true
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(doIt(_:)))
textView.addGestureRecognizer(tapGesture)
}
@objc func doIt(_ sender: UITapGestureRecognizer) {
heightConstraint.constant = heightConstraint.constant == 50 ? 150 : 50
UIView.animate(withDuration: 2) {
self.view.layoutIfNeeded()
}
}
}
PlaygroundPage.current.liveView = ViewController()
# 2। UIViewPropertyAnimator
এর init(duration:curve:animations:)
আরম্ভকারী এবং startAnimation()
পদ্ধতি ব্যবহার করে
init(duration:curve:animations:)
নিম্নলিখিত ঘোষণা আছে:
বিল্ট-ইন ইউআইকিট টাইমিং কার্ভ দিয়ে অ্যানিম্যাটর সূচনা করে।
convenience init(duration: TimeInterval, curve: UIViewAnimationCurve, animations: (() -> Void)? = nil)
শো নিচে খেলার মাঠ কোডের একটি সম্ভাব্য বাস্তবায়ন init(duration:curve:animations:)
এবং startAnimation()
অর্ডারে একটি অটো লেআউট বাধ্যতা এর ধ্রুবক পরিবর্তন এনিমেট হবে।
import UIKit
import PlaygroundSupport
class ViewController: UIViewController {
let textView = UITextView()
lazy var heightConstraint = textView.heightAnchor.constraint(equalToConstant: 50)
override func viewDidLoad() {
view.backgroundColor = .white
view.addSubview(textView)
textView.backgroundColor = .orange
textView.isEditable = false
textView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
textView.translatesAutoresizingMaskIntoConstraints = false
textView.topAnchor.constraint(equalToSystemSpacingBelow: view.layoutMarginsGuide.topAnchor, multiplier: 1).isActive = true
textView.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor).isActive = true
textView.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor).isActive = true
heightConstraint.isActive = true
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(doIt(_:)))
textView.addGestureRecognizer(tapGesture)
}
@objc func doIt(_ sender: UITapGestureRecognizer) {
heightConstraint.constant = heightConstraint.constant == 50 ? 150 : 50
let animator = UIViewPropertyAnimator(duration: 2, curve: .linear, animations: {
self.view.layoutIfNeeded()
})
animator.startAnimation()
}
}
PlaygroundPage.current.liveView = ViewController()
# 3। UIViewPropertyAnimator
এর runningPropertyAnimator(withDuration:delay:options:animations:completion:)
ক্লাস পদ্ধতি ব্যবহার করা হচ্ছে
runningPropertyAnimator(withDuration:delay:options:animations:completion:)
নিম্নলিখিত ঘোষণা আছে:
একটি অ্যানিমেটার অবজেক্ট তৈরি করে এবং ফেরত দেয় যা তার অ্যানিমেশনগুলি তত্ক্ষণাত্ চালানো শুরু করে।
class func runningPropertyAnimator(withDuration duration: TimeInterval, delay: TimeInterval, options: UIViewAnimationOptions = [], animations: @escaping () -> Void, completion: ((UIViewAnimatingPosition) -> Void)? = nil) -> Self
নীচের প্লেগ্রাউন্ড কোডটি runningPropertyAnimator(withDuration:delay:options:animations:completion:)
একটি স্বতঃ লেআউট সীমাবদ্ধতার ধ্রুবক পরিবর্তন অ্যানিমেট করার জন্য একটি কার্যকর বাস্তবায়ন দেখায় ।
import UIKit
import PlaygroundSupport
class ViewController: UIViewController {
let textView = UITextView()
lazy var heightConstraint = textView.heightAnchor.constraint(equalToConstant: 50)
override func viewDidLoad() {
view.backgroundColor = .white
view.addSubview(textView)
textView.backgroundColor = .orange
textView.isEditable = false
textView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
textView.translatesAutoresizingMaskIntoConstraints = false
textView.topAnchor.constraint(equalToSystemSpacingBelow: view.layoutMarginsGuide.topAnchor, multiplier: 1).isActive = true
textView.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor).isActive = true
textView.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor).isActive = true
heightConstraint.isActive = true
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(doIt(_:)))
textView.addGestureRecognizer(tapGesture)
}
@objc func doIt(_ sender: UITapGestureRecognizer) {
heightConstraint.constant = heightConstraint.constant == 50 ? 150 : 50
UIViewPropertyAnimator.runningPropertyAnimator(withDuration: 2, delay: 0, options: [], animations: {
self.view.layoutIfNeeded()
})
}
}
PlaygroundPage.current.liveView = ViewController()