VoiceOver হল Apple-এর বিল্ট-ইন স্ক্রিন রিডার যা ইন্টারফেসের প্রতিটি উপাদানকে কণ্ঠ দেয় এবং অঙ্গভঙ্গির মাধ্যমে ডিভাইস নিয়ন্ত্রণ করতে দেয়। প্রযুক্তিটি iOS, iPadOS এবং macOS-এ সিস্টেম স্তরে নির্মিত এবং অতিরিক্ত সফ্টওয়্যার ইনস্টলেশনের প্রয়োজন হয় না। Apple Accessibility (2025) অনুসারে, VoiceOver 40টিরও বেশি ভাষা সমর্থন করে এবং সারা বিশ্বে লক্ষ লক্ষ অন্ধ এবং দৃষ্টি প্রতিবন্ধী ব্যবহারকারী ব্যবহার করেন।
মূল বিষয়
VoiceOver হল একটি স্ক্রিন রিডার যা Apple অপারেটিং সিস্টেমে নির্মিত। এটি অন্ধ এবং দৃষ্টি প্রতিবন্ধী ব্যবহারকারীদের জন্য ডিজাইন করা হয়েছে এবং দৃশ্য যোগাযোগ ছাড়াই ডিভাইসের সাথে সম্পূর্ণ মিথস্ক্রিয়া প্রদান করে। VoiceOver ইন্টারফেসের সমস্ত উপাদানকে কণ্ঠ দেয়: বোতাম, লিঙ্ক, টেক্সট, ছবি, বিজ্ঞপ্তি এবং সিস্টেম উপাদান।
প্রযুক্তিটি প্রথম 2005 সালে macOS-এর জন্য চালু হয়েছিল এবং iOS-এ 2009 সালে iPhone 3GS-এর সাথে আসে। তারপর থেকে, VoiceOver Apple ইকোসিস্টেমের একটি অবিচ্ছেদ্য অংশ এবং প্ল্যাটফর্মের অ্যাক্সেসিবিলিটির পক্ষে প্রধান যুক্তিগুলির মধ্যে একটি হয়ে উঠেছে। VoiceOver সিস্টেম স্তরে নির্মিত — এর অর্থ এটি ডেভেলপারের পক্ষ থেকে অতিরিক্ত একীকরণ ছাড়াই যেকোনো অ্যাপ্লিকেশনে কাজ করে, যদিও কণ্ঠের গুণমান সরাসরি নির্ভর করে অ্যাপ্লিকেশনটি iOS অ্যাক্সেসিবিলিটি API কতটা ভালোভাবে ব্যবহার করে তার উপর।
VoiceOver প্রাকৃতিক বক্তব্য সংশ্লেষণ সহ 40টিরও বেশি ভাষা সমর্থন করে এবং আঞ্চলিক কণ্ঠ সেটিংসের সাথে খাপ খায়। iOS-এ, VoiceOver বাংলা এবং অন্যান্য কয়েকটি ভাষার জন্য Siri ভয়েস ইঞ্জিন ব্যবহার করে, যা বিরাম চিহ্ন এবং প্রসঙ্গের উপর নির্ভর করে সবচেয়ে প্রাকৃতিক শব্দ এবং সঠিক স্বর নিশ্চিত করে।
VoiceOver স্পর্শ ইভেন্টগুলিকে আটকায় এবং স্ট্যান্ডার্ড iOS ইনপুট থেকে ভিন্নভাবে ব্যাখ্যা করে। যখন একজন ব্যবহারকারী স্ক্রিন স্পর্শ করে, VoiceOver আঙুলের নীচের উপাদানটিকে সক্রিয় করে না, বরং প্রথমে এটি কণ্ঠ দেয়। শুধুমাত্র ডাবল-ট্যাপের পর উপাদানটি সক্রিয় হয়। এই মূল পার্থক্যটি অন্ধ ব্যবহারকারীদের আকস্মিক ক্লিকের ঝুঁকি ছাড়াই ইন্টারফেস অন্বেষণ করতে দেয়।
VoiceOver ইন্টারফেস উপাদানগুলি যৌক্তিক ক্রমে পড়ে: বাম থেকে ডান, উপর থেকে নীচে। পড়ার ক্রম iOS ভিউ হায়ারার্কি থেকে উত্তরাধিকারসূত্রে প্রাপ্ত হয়, কিন্তু ডেভেলপার জটিল লেআউটের জন্য accessibilityElements প্রপার্টির মাধ্যমে এটি পরিবর্তন করতে পারেন। ব্যবহারকারী ডানদিকে সোয়াইপ (পরবর্তী) এবং বামদিকে সোয়াইপ (পূর্ববর্তী) করে উপাদানগুলির মধ্যে চলাচল করতে পারেন, পাশাপাশি একটি নির্দিষ্ট উপাদান স্পর্শ করে এটি কণ্ঠ দিতে পারেন।
প্রতিটি চলাচলের সাথে, VoiceOver উপাদানের ধরন (বোতাম, লিঙ্ক, শিরোনাম), এর নাম (accessibilityLabel), অবস্থা (নির্বাচিত, নিষ্ক্রিয়) এবং ইঙ্গিত (accessibilityHint) বলে। যদি উপাদানটিতে একটি মান থাকে — উদাহরণস্বরূপ, একটি ভলিউম স্লাইডার — VoiceOver সেটিও কণ্ঠ দেয়। অ্যাক্সেসিবিলিটি ট্রেটস (UIAccessibilityTraits) ব্যবহারকারীকে উপাদানের আচরণ সম্পর্কে অতিরিক্ত তথ্য দেয়: এটি কি বোতাম, সুইচ, অনুসন্ধান ক্ষেত্র বা কীবোর্ড কী।
রোটর হল একটি ভার্চুয়াল অ্যাডজাস্টমেন্ট ডায়াল যা VoiceOver নেভিগেশন মোড পরিবর্তন করে। ব্যবহারকারী দুটি আঙুল দিয়ে রোটর ঘোরান (ভলিউম নবের মতো) এবং একটি মোড নির্বাচন করেন: শব্দ, অক্ষর, শিরোনাম, লিঙ্ক, প্রবেশ বিন্দু, টেবিল সারি এবং অন্যান্য। শিরোনাম মোড ওয়েব পৃষ্ঠা এবং অ্যাপ্লিকেশনে H1-H6-এর মধ্যে দ্রুত স্যুইচ করার অনুমতি দেয়, যখন অক্ষর মোড টেক্সট অক্ষর দ্বারা অক্ষর বলে, যা ফর্ম পূরণ বা যাচাইকরণ কোড প্রবেশ করার সময় দরকারী।
ডেভেলপার UIAccessibilityCustomRotor API-এর মাধ্যমে রোটরে কাস্টম মোড যোগ করতে পারেন। উদাহরণস্বরূপ, নোট অ্যাপ্লিকেশনে, “পছন্দের নোট” বা “সাম্প্রতিক পরিবর্তন” রোটর যোগ করা যেতে পারে। কাস্টম রোটর নির্দিষ্ট অ্যাপ্লিকেশনে নেভিগেশন উল্লেখযোগ্যভাবে ত্বরান্বিত করে এবং iOS অ্যাক্সেসিবিলিটির জন্য সর্বোত্তম অনুশীলন হিসাবে বিবেচিত হয়।
VoiceOver অঙ্গভঙ্গির নিজস্ব সেট ব্যবহার করে যা স্ট্যান্ডার্ড iOS অঙ্গভঙ্গির সাথে মেলে না। বেশিরভাগ অঙ্গভঙ্গি একটি আঙুলের পরিবর্তে তিনটি আঙুল দিয়ে করা হয় — এটি সাধারণ অপারেশনের সাথে দ্বন্দ্ব প্রতিরোধ করে এবং VoiceOver-কে স্ট্যান্ডার্ড ইনপুটের সাথে একসাথে কাজ করতে দেয়।
| কাজ | অঙ্গভঙ্গি | ফলাফল |
|---|---|---|
| উপাদান কণ্ঠ দিন | 1 আঙুলে ট্যাপ | উপাদানের নাম বলে |
| সক্রিয় করুন | ডাবল-ট্যাপ | বোতাম বা লিঙ্ক চাপে |
| পরবর্তী উপাদান | ডানদিকে সোয়াইপ | পরবর্তীতে যান |
| পূর্ববর্তী উপাদান | বামদিকে সোয়াইপ | পূর্ববর্তীতে ফিরে যান |
| স্ক্রল | 3 আঙুলে সোয়াইপ | তালিকা বা পৃষ্ঠা স্ক্রল করুন |
| রোটর | 2 আঙুলে ঘোরান | নেভিগেশন মোড পরিবর্তন করুন |
ডাবল-ট্যাপ অঙ্গভঙ্গি VoiceOver-এ উপাদান সক্রিয় করার প্রধান উপায়। যদি কোনো উপাদানের বিশেষ কাজের প্রয়োজন হয় (উদাহরণস্বরূপ, টেনে আনা), VoiceOver মুভ মোডে প্রবেশের জন্য “ট্যাপ — ডাবল-ট্যাপ এবং ধরে রাখা” ক্রম ব্যবহার করে। এটি স্ক্রিন না দেখে ড্র্যাগ-এন্ড-ড্রপের মতো জটিল অঙ্গভঙ্গি করতে দেয়। VoiceOver কাজ বাতিল করার জন্য “দুই আঙুলে ডাবল-ট্যাপ” এবং স্ক্রিন কার্টেন (Screen Curtain) চালু/বন্ধ করার জন্য “ট্রিপল-ট্যাপ” অঙ্গভঙ্গিও সমর্থন করে।
iOS অ্যাপ্লিকেশন ডেভেলপার UIAccessibility API-এর মাধ্যমে VoiceOver মিথস্ক্রিয়া উল্লেখযোগ্যভাবে উন্নত করতে পারেন। মৌলিক অ্যাক্সেসিবিলিটি সেটিংস Interface Builder-এ (Identity Inspector → Accessibility) যোগ করা হয়, কিন্তু জটিল ইন্টারফেসের জন্য কোডে প্রোগ্রাম্যাটিক কনফিগারেশন প্রয়োজন।
accessibilityLabel প্রপার্টি টেক্সট সেট করে যা VoiceOver উপাদানের জন্য বলে। যদি লেবেল সেট না করা হয়, VoiceOver বোতামের টেক্সট বা টেক্সট ফিল্ডের প্লেসহোল্ডার ব্যবহার করে। টেক্সটবিহীন উপাদানের (আইকন, কাস্টম ভিউ) জন্য লেবেল বাধ্যতামূলক। accessibilityTraits প্রপার্টি উপাদানের ধরন নির্ধারণ করে: বোতাম, শিরোনাম, সুইচ, অনুসন্ধান ক্ষেত্র, কীবোর্ড কী, মান পরিবর্তন, লিঙ্ক এবং অন্যান্য।
let profileButton = UIButton(type: .custom)
profileButton.setImage(UIImage(named: "avatar"), for: .normal)
profileButton.isAccessibilityElement = true
profileButton.accessibilityLabel = "ব্যবহারকারী প্রোফাইল"
profileButton.accessibilityTraits = .button
profileButton.accessibilityHint = "প্রোফাইল সেটিংস স্ক্রিন খোলে"
isAccessibilityElement ফ্ল্যাগ কাস্টম ভিউ-এর জন্য VoiceOver সমর্থন সক্ষম করে — ডিফল্টরূপে এটি শুধুমাত্র স্ট্যান্ডার্ড উপাদানের (UIButton, UILabel, UITextField) জন্য সত্য। accessibilityHint প্যারামিটার একটি ইঙ্গিত যোগ করে: VoiceOver এটি বিরতির পরে বলে যদি ব্যবহারকারী কোনো উপাদানে থামে। ইঙ্গিতটি কাজের ফলাফল বর্ণনা করা উচিত, নির্দেশনা নয়: “সেটিংস স্ক্রিন খোলে” “খোলার জন্য চাপুন”-এর পরিবর্তে।
জটিল স্ক্রিনের জন্য যেখানে উপাদানের যৌক্তিক গ্রুপ দৃশ্যমান ক্রমের সাথে মেলে না, accessibilityElements ব্যবহার করা হয় — একটি অ্যারে যা পড়ার ক্রম সেট করে। উদাহরণস্বরূপ, একটি পণ্য কার্ডে একটি ছবি, নাম, দাম এবং “কার্টে যোগ করুন” বোতাম থাকে। যদি এই উপাদানগুলি ভিউ হায়ারার্কিতে বিশৃঙ্খলভাবে সাজানো থাকে, accessibilityElements VoiceOver-এর জন্য সঠিক ক্রম স্থাপন করে।
let productCard = UIView()
let productImage = UIImageView()
let productName = UILabel()
let productPrice = UILabel()
let addToCartButton = UIButton()
productCard.accessibilityElements = [
productImage, productName, productPrice, addToCartButton
]
একাধিক উপাদানকে একটি অ্যাক্সেসিবল উপাদানে একত্রিত করতে, UIAccessibilityContainer বা স্পর্শ এলাকা ওভাররাইড করতে accessibilityFrame ব্যবহার করা হয়। এটি দরকারী যখন একটি টেবিল সেলে একাধিক UI উপাদান থাকে কিন্তু যৌক্তিকভাবে একটি উপাদান উপস্থাপন করে — VoiceOver পুরো সেলটি একসাথে কণ্ঠ দেওয়া উচিত, এর বিষয়বস্তু পৃথকভাবে পুনরাবৃত্তি না করে।
VoiceOver-এর জন্য সঠিক অ্যাক্সেসিবিলিটি কনফিগারেশনে বেশ কয়েকটি দিকে মনোযোগ প্রয়োজন: শব্দার্থক মার্কআপ, ডায়নামিক আপডেট, কাস্টম উপাদান পরিচালনা এবং বাস্তব স্ক্রিন রিডারের সাথে পরীক্ষা।
SwiftUI-তে, অ্যাক্সেসিবিলিটি .accessibilityLabel(), .accessibilityValue(), .accessibilityHint() এবং .accessibilityAddTraits() মডিফায়ারের মাধ্যমে কনফিগার করা হয়। SwiftUI স্বয়ংক্রিয়ভাবে স্ট্যান্ডার্ড উপাদান থেকে অ্যাক্সেসিবিলিটি উত্তরাধিকারসূত্রে পায়, কিন্তু কাস্টম উপাদানের জন্য স্পষ্ট কনফিগারেশন প্রয়োজন। উদাহরণস্বরূপ, একটি কাস্টম স্লাইডারকে VoiceOver-কে তার মান এবং পরিবর্তন বিন্যাস জানাতে হবে।
Slider(value: $volume, in: 0...100)
.accessibilityLabel("শব্দ স্তর")
.accessibilityValue(
Text("\(Int(volume)) শতাংশ")
)
.accessibilityAddTraits(.adjustsAudioForAccessibility)
.accessibilityAdjustableAction { direction in
switch direction {
case .increment: volume = min(volume + 5, 100)
case .decrement: volume = max(volume - 5, 0)
}
}
accessibilityAdjustableAction মডিফায়ার VoiceOver অঙ্গভঙ্গির সাথে মান পরিবর্তনের ক্ষমতা যোগ করে: উপরে সোয়াইপ — বাড়ান, নীচে সোয়াইপ — কমান। এই মডিফায়ার ছাড়া, স্লাইডারটি স্ক্রিন রিডার নিয়ন্ত্রণের জন্য দুর্গম থাকবে। কাস্টম স্টেপার, পিকার এবং অন্যান্য উপাদানের জন্য অনুরূপ কনফিগারেশন প্রয়োজন যা তাদের মান পরিবর্তন করে।
যখন স্ক্রিনের বিষয়বস্তু ডায়নামিকভাবে পরিবর্তিত হয় (একটি বিজ্ঞপ্তি আসে, লোডিং স্থিতি আপডেট হয়, দাম পরিবর্তিত হয়), VoiceOver-কে UIAccessibility.post-এর মাধ্যমে একটি বিজ্ঞপ্তি গ্রহণ করতে হবে। এই কল ছাড়া, স্ক্রিন রিডার পরিবর্তন সম্পর্কে জানতে পারবে না এবং ব্যবহারকারী গুরুত্বপূর্ণ তথ্য মিস করবে। SwiftUI-এর জন্য, .accessibilityAnnouncement() মডিফায়ার ব্যবহার করা হয়।
UIAccessibility.post(
notification: .announcement,
argument: "মূল্য 20 শতাংশ কমানো হয়েছে"
)
// SwiftUI
Text("মূল্য আপডেট করা হয়েছে")
.accessibilityAnnouncement(Text("20% ছাড়"))
VoiceOver বিজ্ঞপ্তিগুলি বুদ্ধিমানের সাথে ব্যবহার করা উচিত: অত্যধিক ঘোষণা ব্যবহারকারীকে বিরক্ত করে, অন্যদিকে তাদের অনুপস্থিতি অ্যাপ্লিকেশনটিকে দুর্গম করে তোলে। সর্বোত্তম কৌশল হ'ল শুধুমাত্র সেই পরিবর্তনগুলি ঘোষণা করা যা ব্যবহারকারীর বর্তমান কাজের প্রবাহকে প্রভাবিত করে: কার্ট আপডেট, লোডিং স্থিতি, ফর্ম বৈধতা ত্রুটি, চ্যাট বিজ্ঞপ্তি। পটভূমি পরিবর্তন (প্যানেলে সময়, মুদ্রার হার) ঘোষণার প্রয়োজন হয় না — ব্যবহারকারী প্রয়োজন হলে সেগুলি নিজেই পরীক্ষা করবেন।
VoiceOver পরীক্ষা স্ক্রিন রিডার চালু সহ একটি শারীরিক ডিভাইস বা Accessibility Inspector বিকল্প সহ iOS সিমুলেটরের মাধ্যমে করা হয়। সম্পূর্ণ ব্যবহারের পরিস্থিতি পরীক্ষা করা গুরুত্বপূর্ণ: দৃশ্য নিয়ন্ত্রণ ছাড়াই নিবন্ধন সম্পূর্ণ করা, অর্ডার দেওয়া, অনুসন্ধানের মাধ্যমে পণ্য খুঁজে পাওয়া। যদি প্রবাহটি দৃশ্য প্রতিক্রিয়া ছাড়াই নেভিগেটযোগ্য হয় — VoiceOver সঠিকভাবে কনফিগার করা হয়েছে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
সেটিংস → অ্যাক্সেসিবিলিটি → VoiceOver। সুইচ চালু করুন। দ্রুত সক্রিয়করণের জন্য, সাইড বোতামের (iPhone X এবং নতুন) বা হোম বোতামের ট্রিপল-ক্লিক ব্যবহার করুন। Siri “VoiceOver চালু করুন” কমান্ড দিয়েও VoiceOver চালু করতে পারে।
VoiceOver হল iOS-এর জন্য Apple-এর স্ক্রিন রিডার, TalkBack হল Android-এর জন্য Google-এর স্ক্রিন রিডার। কাজের নীতি একই: স্পর্শ কণ্ঠ দেয়, ডাবল-ট্যাপ সক্রিয় করে। পার্থক্য অঙ্গভঙ্গি, রোটর সেটিংস এবং ইকোসিস্টেম একীকরণে: VoiceOver iCloud এবং Apple Pay-এর সাথে আরও গভীরভাবে একীভূত।
UIAccessibility API ব্যবহার করুন: সমস্ত উপাদানের জন্য accessibilityLabel, উপাদানের ধরণের জন্য accessibilityTraits এবং ইঙ্গিতের জন্য accessibilityHint সেট করুন। SwiftUI-তে, .accessibilityLabel() এবং .accessibilityAddTraits() মডিফায়ার ব্যবহার করুন। VoiceOver চালু রেখে অ্যাপ্লিকেশনটি পরীক্ষা করুন।
রোটর হল একটি নেভিগেশন মোড যা দুটি আঙুল ঘোরানোর মাধ্যমে পরিবর্তিত হয়। এটি নির্ধারণ করে কীভাবে উপাদানগুলির মধ্যে চলাচল করতে হবে: শিরোনাম, অক্ষর, শব্দ, লিঙ্ক বা প্রবেশ বিন্দু দ্বারা। ডেভেলপাররা UIAccessibilityCustomRotor-এর মাধ্যমে তাদের নিজস্ব মোড যোগ করতে পারেন।
কাস্টম UIView-এর জন্য, isAccessibilityElement = true সেট করা এবং accessibilityLabel প্রদান করা প্রয়োজন। যদি উপাদানটি একাধিক চাইল্ড ভিউ নিয়ে গঠিত, তবে পড়ার ক্রম সেট করতে accessibilityElements ব্যবহার করুন বা সেগুলিকে একটি কন্টেইনারে একত্রিত করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন