Accessibility: Mac Catalyst
Mac uygulamalarınızda erişebilirliği arttırarak uygulamalarınızın kullanıcı deneyimini güzelleştirin!
Merhaba TurkishKit okuyucuları! Bugün sizlerle birlikte Mac Catalyst uygulamalarınızda erişebilirliği nasıl kullanabileceğinizi konuşacağız. Erişebilirlik özelliklerini inceleyeceğiz ve kodunuza nasıl entegre edebileceğinizi göstereceğiz.
WWDC’de çıkan yeni özellikler ile birlikte bilgisayar uygulamalarında erişebilirlik, Apple tarafından tamamen yeni bir seviyeye çıkarıldı. Apple, yeni dönemde kullandığı erişebilirlik özelliğini üç ayrı kategoriye ayırarak aydınlatıyor.
Klavye Kullanımı
Mac uygulamalarında erişebilirlik deyince akla ilk klavye gelmektedir. Klavyenizi kullanarak bir çok işlem yapabilir ve kullanıcı deneyiminizi güzelleştirebilirsiniz.
Klavye Fokusu
Klavye fokusu, herhangi bir unsuru seçmek için klavyenizi kullanabilmektir. Normalde düğmelere basarken veya herhangi bir dosya seçerken fare kullanılır. Ancak klavye fokusunu kullanarak klavyenizle bu seçme işlemini yapabilirsiniz.
Bunu yapabilmek için bilgisayar ayarlarınızdan, klavye ayarlarına girmeniz ve sonra “Kısa Yollar” menüsünden erişebilirlik seçeneğine girip en alttaki kutuyu seçmeniz gerekir.
Artık tab tuşunu kullanarak bir sonraki seçeneklere gidebilir, shift+tab tuşlarını kullanarak da bir önceki seçeneklere ulaşabilirsiniz. Seçenekleri seçebilmek için ise boşluk tuşunu kullanabilirsiniz.
Klavye ile kontrol özelliğini Mac uygulamanıza eklemek istiyorsanız selectionFollowsFocus
özelliğinden yararlanmanız gerekecektir. Bunu ya aşağıda belirtildiği gibi yapabilirsiniz.
extension MyTableViewController {
override func viewDidLoad() {
tableView.selectionFollowsFocus = true
}
}
Böylece artık ok tuşlarından yararlanarak da uygulamanızda yol bulabileceksinizdir.
Klavye Kısaltmaları
Kullanıcı deneyimini arttırmak için aynı zamanda klavye kısaltmalarına başvurmak gerekir. Mesela copy-paste yaparken cmd+c ve cmd+v kullanarak aslında bir klavye kısaltması kullanmış olursunuz. Bu, hem zaman kazanmanızı sağlar hem de işi pratikleştirir.
Klavye kısaltmalarından tam anlamı ile yararlanmak istiyorsanız Apple’ın dokümentasyonuna bir göz atabilirsiniz.
Kendi uygulamalarınıza kısaltma eklemek istiyorsanız öncellikle piyasada bulunan popüler uygulamaları incelemenizi tavsiye ederim. Onların kullandıkları kısaltmalara genelde insanlar alışmış olur ve böylece uygulamanıza insanların daha rahat kullanabileceği kısaltmalar ekleyebilirsiniz.
Aşağıdaki kodu yazarak uygulamanıza kişiselleştirilmiş kısaltmalar ekleyebilirsiniz.
extension AppDelegate {
override func buildMenu(with builder: UIMenuBuilder) {
let shareCommand = UIKeyCommand(title: NSLocalizedString("Share", comment: ""),
action: #selector(AppDelegate.favoritePressed)
input: "I"
modifierFlag: [.command]) let shareMenu = UIMenu(title: "",
identifier: UIMenu.Identifier("com.apple.name.share"),
options: .displayInline,
children: [shareCommand])
builder.insertChild(shareMenu, atEndOfMenu: .edit)
}
Bu kodu yazarak cmd+i kısaltmasını uygulamasının menüsünde “Share” seçeneği ve fonksiyonu altına eklemiş olursunuz.
Klavyenizin kontrollerini tamamen değiştirmek istiyorsanız — bu genelde herhangi bir oyun yaparken kullanılıyor — keyCode API’ını kullanabilirsiniz. Bu, klavyenizde herhangi bir tuşa basarak oyununuzu kontrol edebilmenizi sağlayacaktır. Bu noktada en sık kullanılan kontrollerden biri oyuncuyu ileri-geri sağa-sola hareket ettirebilmesini sağlayan “WSDA” kontrolleridir.
Kodunuza bu kontrolleri aşağıdaki gibi ekleyebilirsiniz:
@available(iOS 13.4, *)
public enum UIKeyboardHIDUsage: CFIndex {
case keyboardA
case keyboardB
case keyboardCapsLock
case keyboardLeftGUI
}extension MyViewController {
override func pressesBegan(_presses: Set<UIPress>, with event: UIPressesEvent?) {
switch presses.first?.key?.keyCode {
case .keyboardLeftGUI: // Herhangi bir işlem yazın
case .keyboardB: // Herhangi bir işlem yazın
}
}
}
Navigasyon Kolaylığı
Uygulamanızı kullananların uygulamanızı keşfetmesi kolay olmalıdır. Mesela voiceover özelliğinden bahsedersek, normalde uygulamanızdaki tüm yazılanları/seçenekleri size okuması gerekir. Ancak uygulamanızda 26 tane seçenek varsa ve siz her uygulamaya girdiğinizden bu 26 seçenekten birini seçmek zorunda kalırsanız işiniz biraz karışık ve uzun olur.
Bunu engelleyebilmek için uygulamanızda aynı fonksiyona yarayan unsurları gruplamanız gerekir. Mesela Instagram’dan örnek alırsak aslında sayfasında beğenme butonu, post, yorumlar, DM butonu gibi bir çok unsur varken aslında header, footer ve body diye üç ana kısım vardır. Bu nedenle voiceover eklenince ilk header, body ve footer olarak kullanıcınızı yönlendirecektir ve her seferinde tüm unsurları saymak zorunda kalmayacaktır.
Bu noktada bazen çok fazla grup veya çok az grup oluşturabilme ihtimaliniz var. İki durum da uygulamanızın kullanıcı deneyimini kötüleştirebilir. Size yol göstermesi için uygulamanızı bir arkadaşınıza anlatmayı deneyin. Uygulamanızın nasıl kullanıldığını anlarsa da anlatırken kullandığınız grupları kodda VoiceOver’ın kullanabileceği şekilde düzenleyin.
Grup oluşturup adlarını belirlemek için aşağıdaki kodu kullanabilirsiniz:
enum UIAccessibilityContainerType: Int {
case none
case dataTable // PDF veya web sayfaları için kullanılabilir
case list // Web sayfası veya tvOS için kullanılabilir
case landmark // Geri kalan her unsur için kullanılabilir
case semanticGroup // İlk okunmasını istediğiniz gruplar
}
var accessibilityContainerType: UIAccessibilityContainerType { get set }
Oluşturduğunuz grupları kodunuza aşağıdaki gibi ekleyebilirsiniz. Bu kod, gruplarınızı veya unsurlarınızın nasıl okunacağını belirlemek için kullanılır. Örnek kodda “name” unsurunun .level özelliğinin VoiceOver ile okunma kodu bulunmaktadır:
override func viewDidLoad() {
super.viewDidLoad() table.accessibilityLabel = NSLocalizedString("Name List", comment: "")
}func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let label = NSLocalizedString("Name List", comment: "")
let selectedLabel = NSLocalizedString("%@ selected", comment: "")
tableView.accessibilityLabel = label + ", " String(format: label, name[indexPath.row].level)
}
UIStackView’u AccessibilityContainer yapabilmek için aşağıdaki koda benzer bir kod yazabilirsiniz. Bu, istediğiniz unsuru oluşturduğunuz gruplara yerleştirmek için kullanılır:
let stackView = UIStackView()
stackView.axis = .verticallet locationsAvailable = [...]let titleLabel = UILabel()
titleLabel.text = NSLocalizedString("Availability: ", comment: "")
stackView.addArrangedSubview(titleLabel)for location in locationsAvailable {
let label = UILabel()
label.text = location
stackView.addArrangedSubview(label)
}stackView.accessibilityContainerType = .semanticGroup
let label = NSLocalizedString("Available at %@ locations", comment: "")
stackView.accessibilityLabel = String(format: label, locationsAvailable.count)
Erişebilirlik ile Çalışmak
iOS için yazdığınız uygulamalar otomatik olarak macOS’e geçirebiliyor. Bu nedenle Mac uygulaması yaparken herhangi bir ekstra uğraş vermenize gerek kalmayacak.
Bir makalenin daha sonuna geldik! 🥳 Bu makalede Mac Catalyst uygulamalarınıza erişebilirlik özelliklerini nasıl ekleyebileceğimizi öğrendik. Erişebilirlik hakkında daha fazla bilgi öğrenmek istiyorsanız sonraki makaleleri takip etmeyi unutmayın! İyi kodlamalar!