VoiceOver: iOS'ta jest kontrolleri ve özellikleri

Yazar: IT Sectr Yayınlanma: 2026-05-15 Okuma süresi: 8 dk

VoiceOver, Apple'ın her arayüz öğesini seslendiren ve jestlerle cihazı kontrol etmeyi sağlayan yerleşik ekran okuyucusudur. Teknoloji, sistem düzeyinde iOS, iPadOS ve macOS'a entegre edilmiştir ve ek yazılım kurulumu gerektirmez. Apple Accessibility (2025)'e göre VoiceOver 40'tan fazla dili destekler ve dünya çapında milyonlarca görme engelli ve az gören kullanıcı tarafından kullanılır.

Önemli Noktalar

  • VoiceOver iOS, iPadOS ve macOS'ta yerleşik, jestler ve sesle kontrol edilen ekran okuyucusudur
  • VoiceOver Rotoru gezinme modlarını değiştirir: kelimeler, karakterler, başlıklar, bağlantılar
  • Jestler dokunma (seslendirme), kaydırma (gezinme) ve çift dokunma (etkinleştirme) içerir
  • Geliştiriciler erişilebilirliği UIAccessibility ve Accessibility Label aracılığıyla yapılandırır
  • VoiceOver dinamik metin ve braille ekranlarla entegre olur

VoiceOver Nedir?

VoiceOver, Apple işletim sistemlerine entegre edilmiş bir ekran okuyucusudur. Görme engelli ve az gören kullanıcılar için tasarlanmıştır ve görsel temas olmadan cihazla tam etkileşim sağlar. VoiceOver arayüzün tüm öğelerini seslendirir: düğmeler, bağlantılar, metin, resimler, bildirimler ve sistem öğeleri.

Teknoloji ilk olarak 2005 yılında macOS için tanıtıldı ve iOS'ta 2009 yılında iPhone 3GS ile birlikte geldi. O zamandan beri VoiceOver, Apple ekosisteminin ayrılmaz bir parçası ve platformun erişilebilirliği lehindeki ana argümanlardan biri haline geldi. VoiceOver sistem düzeyinde yerleşiktir — yani geliştiriciden ek entegrasyon olmadan herhangi bir uygulamada çalışır, ancak seslendirme kalitesi doğrudan uygulamanın iOS Erişilebilirlik API'sini ne kadar iyi kullandığına bağlıdır.

VoiceOver, doğal konuşma sentezi ile 40'tan fazla dili destekler ve bölgesel ses ayarlarına uyum sağlar. iOS'ta VoiceOver, Türkçe ve diğer birçok dil için Siri ses motorlarını kullanarak noktalama işaretleri ve bağlama bağlı olarak en doğal sesi ve doğru tonlamayı sağlar.

VoiceOver Nasıl Çalışır?

VoiceOver dokunma olaylarını yakalar ve bunları standart iOS girişinden farklı şekilde yorumlar. Bir kullanıcı ekrana dokunduğunda, VoiceOver parmağın altındaki öğeyi etkinleştirmez, önce onu seslendirir. Yalnızca çift dokunmadan sonra öğe etkinleşir. Bu temel fark, görme engelli kullanıcıların yanlışlıkla tıklama riski olmadan arayüzü keşfetmesine olanak tanır.

Okuma Sırası ve Gezinme

VoiceOver arayüz öğelerini mantıksal sırayla okur: soldan sağa, yukarıdan aşağıya. Okuma sırası iOS görünüm hiyerarşisinden devralınır, ancak geliştirici karmaşık düzenler için accessibilityElements özelliği aracılığıyla değiştirebilir. Kullanıcı, sağa kaydırarak (sonraki) ve sola kaydırarak (önceki) öğeler arasında hareket edebilir ve ayrıca belirli bir öğeye dokunarak seslendirilmesini sağlayabilir.

Her harekette VoiceOver, öğe türünü (düğme, bağlantı, başlık), adını (accessibilityLabel), durumunu (seçili, devre dışı) ve ipucunu (accessibilityHint) söyler. Öğe bir değer içeriyorsa — örneğin, bir ses seviyesi kaydırıcısı — VoiceOver onu da seslendirir. Erişilebilirlik Özellikleri (UIAccessibilityTraits), kullanıcıya öğenin davranışı hakkında ek bilgi verir: bir düğme, anahtar, arama alanı veya klavye tuşu olup olmadığı.

VoiceOver Rotoru

Rotor, VoiceOver gezinme modunu değiştiren sanal bir ayar kadranıdır. Kullanıcı rotoru iki parmağıyla döndürür (bir ses düğmesi gibi) ve bir mod seçer: kelimeler, karakterler, başlıklar, bağlantılar, giriş noktaları, tablo satırları ve diğerleri. Başlık modu, web sayfalarında ve uygulamalarda H1-H6 arasında hızlı geçiş yapmayı sağlarken, karakter modu metni harf harf söyler, bu da form doldurma veya doğrulama kodu girerken kullanışlıdır.

Geliştirici, UIAccessibilityCustomRotor API'si aracılığıyla rotora özel modlar ekleyebilir. Örneğin, bir not uygulamasında “Favori Notlar” veya “Son Değişiklikler” rotoru eklenebilir. Özel rotorlar belirli uygulamalarda gezinmeyi önemli ölçüde hızlandırır ve iOS erişilebilirliğinde en iyi uygulama olarak kabul edilir.

VoiceOver Jest Kontrolleri

VoiceOver, standart iOS jestleriyle eşleşmeyen kendi jest setini kullanır. Çoğu jest, bir parmak yerine üç parmakla gerçekleştirilir — bu, normal çalışmayla çakışmaları önler ve VoiceOver'ın standart girişle aynı anda çalışmasını sağlar.

EylemJestSonuç
Öğeyi seslendir1 parmakla dokunmaÖğe adını söyler
EtkinleştirÇift dokunmaDüğmeye veya bağlantıya basar
Sonraki öğeSağa kaydırmaSonraki öğeye geç
Önceki öğeSola kaydırmaÖnceki öğeye dön
Kaydırma3 parmakla kaydırmaListeyi veya sayfayı kaydır
Rotor2 parmakla döndürmeGezinme modunu değiştir

Çift dokunma jesti, VoiceOver'da öğeleri etkinleştirmenin ana yoludur. Bir öğe özel bir eylem gerektiriyorsa (örneğin, sürükleme), VoiceOver hareket moduna girmek için “dokunma — çift dokunma ve basılı tutma” sırasını kullanır. Bu, ekranı görmeden sürükle-bırak gibi karmaşık jestlerin gerçekleştirilmesini sağlar. VoiceOver ayrıca bir eylemi iptal etmek için “iki parmakla çift dokunma” ve Ekran Perdesini (Screen Curtain) açıp kapatmak için “üçlü dokunma” jestini de destekler.

Mobil Geliştirmede VoiceOver

iOS uygulama geliştiricisi, UIAccessibility API'si aracılığıyla VoiceOver etkileşimini önemli ölçüde iyileştirebilir. Temel erişilebilirlik ayarları Interface Builder'da (Identity Inspector → Accessibility) eklenir, ancak karmaşık arayüzler kodda programatik yapılandırma gerektirir.

Erişilebilirlik Etiketi ve Özellikler

accessibilityLabel özelliği, VoiceOver'ın öğe için söylediği metni ayarlar. Etiket ayarlanmazsa, VoiceOver düğme metnini veya metin alanı yer tutucusunu kullanır. Metni olmayan öğeler (simgeler, özel görünümler) için etiket zorunludur. accessibilityTraits özelliği öğe türünü tanımlar: düğme, başlık, anahtar, arama alanı, klavye tuşu, değer değiştirir, bağlantı ve diğerleri.

swift
let profileButton = UIButton(type: .custom)
profileButton.setImage(UIImage(named: "avatar"), for: .normal)
profileButton.isAccessibilityElement = true
profileButton.accessibilityLabel = "Kullanıcı profili"
profileButton.accessibilityTraits = .button
profileButton.accessibilityHint = "Profil ayarları ekranını açar"

isAccessibilityElement bayrağı, özel görünümler için VoiceOver desteğini etkinleştirir — varsayılan olarak yalnızca standart öğeler (UIButton, UILabel, UITextField) için doğrudur. accessibilityHint parametresi bir ipucu ekler: kullanıcı bir öğede durursa, VoiceOver bir duraklamadan sonra ipucunu söyler. İpucu, eylemin sonucunu tanımlamalıdır, talimatı değil: “Ayarlar ekranını açar”, “açmak için basın” yerine.

Gruplama ve Öğe Sırası

Öğelerin mantıksal grubunun görsel sırayla eşleşmediği karmaşık ekranlar için accessibilityElements kullanılır — okuma sırasını ayarlayan bir dizi. Örneğin, bir ürün kartı bir resim, ad, fiyat ve “Sepete Ekle” düğmesi içerir. Bu öğeler görünüm hiyerarşisinde düzensiz bir şekilde düzenlenmişse, accessibilityElements VoiceOver için doğru sırayı belirler.

swift
let productCard = UIView()
let productImage = UIImageView()
let productName = UILabel()
let productPrice = UILabel()
let addToCartButton = UIButton()

productCard.accessibilityElements = [
    productImage, productName, productPrice, addToCartButton
]

Birden çok öğeyi tek bir erişilebilir öğede birleştirmek için, dokunma alanını geçersiz kılmak üzere UIAccessibilityContainer veya accessibilityFrame kullanılır. Bu, bir tablo hücresi birden çok UI bileşeni içerdiğinde ancak mantıksal olarak tek bir öğeyi temsil ettiğinde kullanışlıdır — VoiceOver tüm hücreyi bir bütün olarak seslendirmeli, içeriğini tek tek dolaşmamalıdır.

VoiceOver için Erişilebilirlik Yapılandırması

VoiceOver için doğru erişilebilirlik yapılandırması, birkaç hususa dikkat gerektirir: anlamsal işaretleme, dinamik güncellemeler, özel öğe yönetimi ve gerçek bir ekran okuyucuyla test etme.

SwiftUI'da Anlamsal İşaretleme

SwiftUI'da erişilebilirlik, .accessibilityLabel(), .accessibilityValue(), .accessibilityHint() ve .accessibilityAddTraits() değiştiricileri aracılığıyla yapılandırılır. SwiftUI, standart öğelerden erişilebilirliği otomatik olarak devralır, ancak özel bileşenler açık yapılandırma gerektirir. Örneğin, özel bir kaydırıcı VoiceOver'a değerini ve değişim biçimini bildirmelidir.

swift
Slider(value: $volume, in: 0...100)
    .accessibilityLabel("Ses seviyesi")
    .accessibilityValue(
        Text("\(Int(volume)) yüzde")
    )
    .accessibilityAddTraits(.adjustsAudioForAccessibility)
    .accessibilityAdjustableAction { direction in
        switch direction {
        case .increment: volume = min(volume + 5, 100)
        case .decrement: volume = max(volume - 5, 0)
        }
    }

accessibilityAdjustableAction değiştiricisi, VoiceOver jestleriyle değerleri değiştirme yeteneği ekler: yukarı kaydırma — artırma, aşağı kaydırma — azaltma. Bu değiştirici olmadan, kaydırıcı ekran okuyucu kontrolü için erişilemez kalır. Özel stepleyiciler, seçiciler ve değerini değiştiren diğer öğeler için benzer yapılandırma gerekir.

Dinamik Güncellemeler ve Bildirimler

Ekrandaki içerik dinamik olarak değiştiğinde (bir bildirim görünür, yükleme durumu güncellenir, bir fiyat değişir), VoiceOver'ın UIAccessibility.post aracılığıyla bir bildirim alması gerekir. Bu çağrı olmadan, ekran okuyucu değişiklikleri bilemez ve kullanıcı önemli bilgileri kaçırır. SwiftUI için .accessibilityAnnouncement() değiştiricisi kullanılır.

swift
UIAccessibility.post(
    notification: .announcement,
    argument: "Fiyat yüzde 20 düşürüldü"
)

// SwiftUI
Text("Fiyat güncellendi")
    .accessibilityAnnouncement(Text("%20 indirim"))

VoiceOver bildirimleri akıllıca kullanılmalıdır: aşırı duyurular kullanıcıyı rahatsız ederken, yoklukları uygulamayı erişilemez hale getirir. En uygun strateji, yalnızca kullanıcının mevcut iş akışını etkileyen değişiklikleri duyurmaktır: sepet güncellemeleri, yükleme durumu, form doğrulama hatası, sohbet bildirimi. Arka plan değişiklikleri (paneldeki saat, döviz kurları) duyuru gerektirmez — kullanıcı gerektiğinde bunları kendisi kontrol eder.

VoiceOver testi, ekran okuyucu etkinleştirilmiş fiziksel bir cihaz veya Accessibility Inspector seçeneği olan bir iOS simülatörü kullanılarak gerçekleştirilir. Tam kullanım senaryolarını test etmek önemlidir: görsel kontrol olmadan kaydolma, sipariş verme, arama yoluyla ürün bulma. Akış görsel geri bildirim olmadan gezilebilir ise — VoiceOver doğru yapılandırılmıştır.

Sıkça Sorulan Sorular

iPhone'da VoiceOver nasıl etkinleştirilir?

Ayarlar → Erişilebilirlik → VoiceOver. Anahtarı açın. Hızlı etkinleştirme için yan düğmeye (iPhone X ve sonrası) veya Ana Ekran düğmesine üç kez tıklayın. Siri de “VoiceOver'ı aç” komutuyla VoiceOver'ı etkinleştirebilir.

VoiceOver TalkBack'ten nasıl farklıdır?

VoiceOver, iOS için Apple'ın ekran okuyucusu, TalkBack ise Android için Google'ın ekran okuyucusudur. Çalışma prensibi aynıdır: dokunma seslendirir, çift dokunma etkinleştirir. Fark jestlerde, rotor ayarlarında ve ekosistem entegrasyonlarındadır: VoiceOver iCloud ve Apple Pay ile daha derin entegredir.

Uygulamam için VoiceOver nasıl yapılandırılır?

UIAccessibility API'sini kullanın: tüm öğeler için accessibilityLabel, öğe türü için accessibilityTraits ve ipuçları için accessibilityHint ayarlayın. SwiftUI'da .accessibilityLabel() ve .accessibilityAddTraits() değiştiricilerini kullanın. VoiceOver etkinken uygulamayı test edin.

VoiceOver'da rotor nedir?

Rotor, iki parmak döndürülerek değiştirilen bir gezinme modudur. Öğeler arasında nasıl hareket edileceğini belirler: başlıklara, karakterlere, kelimelere, bağlantılara veya giriş noktalarına göre. Geliştiriciler UIAccessibilityCustomRotor aracılığıyla kendi modlarını ekleyebilir.

VoiceOver neden özel öğemi okumuyor?

Özel UIView için isAccessibilityElement = true ayarlamanız ve accessibilityLabel sağlamanız gerekir. Öğe birden çok alt görünümden oluşuyorsa, okuma sırasını ayarlamak için accessibilityElements kullanın veya bunları bir kapsayıcıda birleştirin.

Özet

  • VoiceOver iOS, iPadOS ve macOS için Apple'ın sesli jest kontrolüne sahip yerleşik ekran okuyucusudur
  • Rotor gezinme modlarını değiştirir: başlıklar, karakterler, kelimeler, bağlantılar ve özel modlar
  • VoiceOver jestleri: dokunma — seslendirme, çift dokunma — etkinleştirme, kaydırma — gezinme
  • Geliştirme UIAccessibility API'si aracılığıyla: label, traits, hint, özel rotor ve dinamik bildirimler
  • SwiftUI .accessibilityLabel(), .accessibilityAddTraits() ve .accessibilityAdjustableAction() değiştiricilerini sağlar
  • Dinamik güncellemeler VoiceOver'ı bilgilendirmek için UIAccessibility.post çağrısı gerektirir
  • Test görsel kontrol olmadan VoiceOver etkinken gerçek bir cihazda zorunludur

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun