Ios'taki Özel Karakterlerle Özel Bir Klavye Uygulamayı Uygulayın
iOS Custom Klavye Extensions'ı Anlamak
iOS, sistem klavyesini değiştirebilecek veya ekleyebilecek özel klavye uzantıları oluşturmak için sağlam bir çerçeve sunar. Bu uzantılar ayrı süreçler olarak çalışır ve sandboxed, yani sistem kaynakları ve kullanıcı verileri ile sınırlı erişime sahiptir. "UIInputViewController' sınıfı herhangi bir özel klavye için temeldir, giriş işlemleri yönetmek, görüş düzeni ve iletişim kurmak.
Özel klavyeler özel karakterler, aksanmış mektuplar, emojiler veya hatta jest bazlı giriş dahil herhangi bir düzeni içerebilir: Apple açık kullanıcı izni olmadan ağ kaynaklarına erişemez ve hala geliştiriciler için esnekliği sağlarken anastroke verilerini toplamak zorunda değildir.
Özel bir klavye inşa ettiğinizde, aslında bir uygulama uzatması yaratıyorsunuz. uzatma ev sahibi bir uygulama içinde paketlenir ve kullanıcılar bu uygulamayı yüklemeli ve sonra uzatma işlemine tam olarak aşağıdaki şekilde etkinleştirmelidir.Settings > General > Klavye > Klavyeler).
Özel karakterler için, gerçek güç verimli erişim kalıpları tasarlarken yatıyor. Birçok geliştirici grup sembolleri mantıksal olarak, ek varyantlar için uzun baskı popupları sunuyor veya özel karakterlerle birlikte üretim hazır bir özel klavye oluşturmak için aşağıdaki bölümlere sahiptir.
Klavye Dahili Projesinin Belirlenmesi
Özel bir klavye oluşturmak Xcode içinde başlar. Hem bir konteyner uygulamasına hem de klavye uzatma hedefine ihtiyacınız var.
Xcode'da Yeni Hedef ekleyin
Mevcut iOS projenizi açın veya yeni bir tane yaratın.Süreme:0)File > Yeni > Hedef), sonra "ÖzelCharKeyboardViewler" olarak adlandırılan bir ürün adı verilir.
Configure Info.plist
uzatmanın “Info.plist”, “NSExction” altında iki kritik anahtar içerir:
- [FONT:0]IsASCIICapable[[Dönetici: “EVETS” için ayarlayın, eğer klavyeniz sadece ASCII karakterleri kullanırsa; aksi takdirde “NO” ayarlar.
- [FONT:0)PrefersRightToLeft): Diliniz doğru sola okursa, ayarlayın.
- [FONT=0)Primary Diller[[[Dönetici: Bir dil kodu (örneğin, “en-US”).
Ayrıca "Privacy - Kamera Kullanımı Açıklama" sadece kamera tabanlı giriş özelliklerini (bir klavye için) içerseniz. gereksiz izinlerden kaçının.
İstekOpenAccess Entitlement
Varsayılan olarak, özel klavyeler ağ erişimine sahip değildir. Özel karakter setlerini indirmeniz veya bulut senkronizasyonu sağlamanız gerekiyorsa, “RequestOpenAccess’ anahtarını “NSExctionAttributes’te “Info.plist’ olarak ayarlayın ve bunu “YES” olarak ayarlayın.
Temel UI kurmak
“KeyboardViewController’in içindeki “Load’ yöntemi, klavye düzeninizi ayarladığınız yerdir. Bir hikaye dolabı kullanabilir veya arayüz programı tematik olarak inşa edebilirsiniz. Birçok özel karakterle karmaşık bir düzen için, programmatik UI dinamik boyutlandırma ve Auto Layout kısıtlamaları üzerinde daha iyi kontrol sunar.
override func viewDidLoad() {
super.viewDidLoad()
// Set up the main container view
let stackView = UIStackView()
stackView.axis = .vertical
stackView.distribution = .fillEqually
stackView.spacing = 4
stackView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(stackView)
NSLayoutConstraint.activate([
stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 4),
stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -4),
stackView.topAnchor.constraint(equalTo: view.topAnchor, constant: 4),
stackView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -4)
])
}
Bu minimum kurulum, anahtarların sıralarını tutacak bir dikey yığın oluşturur.
Özel Karakterler için klavye Layout tasarımını tasarlayın
Özel karakter klavyeleri dikkatli bir organizasyon gerektirir. Kullanıcılar sonsuz anahtar sayfalar aracılığıyla avlanmadan hızla sembolleri bulmak gerekir. Gruplama sembolleri mantıksal kategorilere başlayın:
- [FONT=0]Currency sembolleri[[Dönem: $, €, £, £, £, ⁇ , ⁇ , ⁇ , ⁇ , ⁇
- [FONT:0]Mathematical işaretler[Dönem: +, -, ×, ⁇ , =, ⁇ , ⁇ , ±, √, ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇
- [FONT=0]Punctuation|[[Dönlendirme|Dönlendirme|Dönlendirme|[Dönlendirme|Dönlendirme|Dönlendirme|Dönlendirme|Dönlendirme|Dönlendirme|Dönlendirme|Dönlendirme|Dönlendirme|Dönlendirme|Dönlendirme|Dönlendirme|Dönlendirme|Dönlendirme|Dönlendirme|Dönlendirme|Dönlendirme|Sürdürmesellik|[Düzücükler)
- [FONT:0) Acented harfler[[DÜDÜDÜDÜDÜDÜDÜŞÜNÜ, é, í, ó, ú, u, ñ, çev, çev, çev, çev, çev, ú, u, ñ, çev, çev, çev, çev, çev, çev, çev, çev, çev, çev, çev, çev, s
- [FONT:0]Arrows and yönal[Dönetici: ←, →, ↑, ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇ , ⁇
İki veya üç düzen katmanı uygulayın: Bir simge katmanına geçiş yapmak için ana bir alfabe katmanı ve muhtemelen daha az ortak karakterlerle ikincil bir tabaka kullanın. Özel bir anahtar kullanın (örneğin, “123” veya “#+=”), katmanların arasında geçiş yapmak için.
Ek Karakterler için uzun süreli Gestures
Eğer klavyeniz standart bir QWERTY düzeni gösterirse, kullanıcılar karakter çeşitlerini ortaya çıkarmak için uzun baskı beklerler. Örneğin, mevcut varyantlara “E” anahtar şovları “é”, “è”, “ê”, “ë”, bu, "LongUIPressGestureRecognizer" eklemek için her anahtara uzun baskı sağlarken, mevcut varyantajın üzerindeki anahtarı yukarıda belirtilen varyantlar ile kapatılmalıdır.
Apple'ın sistemi klavyesi iç bir mekanizma kullanır, ancak uzatmanız için, yüz yüzen bir balon olarak görünen bir “UIView” kullanabilirsiniz. popup güvenli alanın ötesine uzatmıyor ve bu da cihaz yönelimine saygı duyuyor.
Kod Snippet: Uzun Basını Anahtarlara Ekle
let longPress = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(_:)))
longPress.minimumPressDuration = 0.3
keyButton.addGestureRecognizer(longPress)
Eller içinde, devletin ".began", ".changed" ve "düşük" gösteri, güncelleme ve popup'tan seçim.
Anahtar Boyut ve Spacing
iOS cihazları ekran genişliğine göre değişir.Doğrusal boyutlandırmayı kullanın: iPhone'larda sıra başına 10-12 anahtar ve iPad'lerde biraz daha fazla olmalıdır.Her anahtar Apple'ın İnsan Interface Kılavuzlarını dokunmak için en az 28 puan olmalıdır. Set constraints so that keys correctly on small characters, enable that sembollerin açıkça görünür; temel etiketler için 16-18 puanlık bir font boyutu kullanın.
Text Doküman Proxy Proxy ile giriş
Bir kullanıcı anahtara dokunduğunda, klavye şu anda odaklanmış metin alanına karakter eklemek zorundadır. Bu, "textDocumentProxy' object, an exampleUITextDocumentProxy" örneği aracılığıyla yapılır.The proxy "insertText( :)", "deleteBackward()" ve "adjustTextPosition (byCharacterOffset:)" gibi yöntemler sunar.
Özel karakterler için, sık sık sık çokbayt 7-8 (örneğin emojiler veya bokslar) eklemek gerekir. Bunlar akut aksan (U+0301) ile doğru bir şekilde ele alınır, her iki karaktere de eklenirsiniz: “proxy.inText(”, “proxy.insert”, “proxy.insert” deyin, ancak önceden sorulan bir kombinasyon için daha basit: “U+0301).
Değiştirin ve Caps Lock
Üst kat ve alt harfler arasında seçim yapmak için devlet yönetimi ve opsiyonel olarak üst köşe sembollerini etkinleştirin.Değişim anahtar aktif olduğunda, klavyeniz üst köşe varyantlarını göstermelidir.(Yunan mektupları gibi), her ikisine de işaret eder veya alternatif sembolleri görüntülemek için kullanılabilir.
Bir boolean mülkünü kullanın “AktifAktif” durumu takip etmek için. kullanıcı geçiş anahtarına dokunduğunda, anahtarları kaplar ve yeniden yükleyin.For caps kilit, çift bir dokunuşu geçiş anahtarına tespit edin; kalıcı bir kapak devleti etkinleştirin ve bir gösterge göster (örneğin, vurgulayın).
Delete ve Cursor Control
“proxy.deleteBackward()” diye adlandırdığı bir silin anahtarı ekleyin. Özel bir karakter klavye için, kullanıcılar tüm kelimeleri çabucak silmeniz gerekebilir. “deletePoward()’ı “taleteleteBackward()’ı bir döngüde veya “adjustTextPosition” yöntemi kullanarak, cümleleri ve cümleleri kullanarak nasıl manipüle edebilirsiniz.
Gecikme veya geriye doğru hareket etmek için, "proxy.adjustTextPosition (byCharacterOffset: 1)" ve "-1", "önemli bir alan" veya "önemli bir alan" düğmesi için kullanılır.
Enabling ve Test the Klavye Extension
Simulator Test
Xcode'da, bir simülatörün üzerindeki konteyner uygulamasını çalıştırın. Sonra "Third-Party Klavye" bölümüne gidin; Genel > Klavye > Yeni klavye[Döneticileri ekle) ekle ve her zaman "Third-Party Klavyeleri" altında özel klavye uzatmanızı seçin.Bir metin alanı aktif olduğunda klavyenize geçiş yapmanız gerekebilir.
Fiziksel Cihaz Testi
Cihaz testleri önemlidir, çünkü simülatörün tüm iOS davranışını tamamen taklit etmiyor (örneğin, klavye yükseklik kısıtlamaları, otomatik-korreksiyon) bir geliştirme profili aracılığıyla bir cihazda konteyner uygulamasını yükleyin. Sonra Xcode'surFLT:0Attach'ı Süreç) işlemine izin verin: debug navigator'da, uzatma işleminizi seçin (örneğin, uzatma işleminizi seçin.
Common Issues
- [FONT=0)Keyboard görünmedi [Dönetici: uzatmanın doğru şekilde etkinleştirilmesi ve “RequestOpenAccess’in entitlement maçlarının ihtiyaçlarının da kontrol edin. Ayrıca “Principal class’ın “KeyboardViewController” puanlarına işaretlerini kontrol edin.
- [FONT:0]Layout doğru bir şekilde boyutlandırmaz[[Dönetici: Override “view WillLayoutSubviews' in your “KeyboardViewController' and update the High constraint of the system's expected High (genellikle 216 ve 330 puan arasında iPad'de daha büyük).
- [FONT=0]Input not registering[Dönetici: Verify that you are call “insertText’ in the correct proxy object.The proxy is available as soon as the klavye is active.
Gizlilik ve Kullanıcı İzinleri
Özel klavyeler kullanıcı gizliliği için bir endişe noktasıdır. Apple, klavyelerin toplanıp, iletmemesini veya açık kullanıcı onayı olmadan anahtarstroke verilerini depolamasını gerektirir. Aşağıdaki kılavuzlar kritiktir:
- [FONT:0] Hiçbir ağ araması[Dönetici: “RequestOpenAccess’in etkinleştirildiği ve kullanıcı izni verdiği sürece, uzatmanız ağ istekleri yapamaz. Açık erişimle bile, veri toplamanızı gizlilik politikasında açıklamanız gerekir.
- [FONT:0]Hiçbir klip ([Dönetici) erişim[Döneticiniz sistem panoyu okuyamaz. Sadece ev sahibi uygulama, kliplere erişebilir ve sadece uygulama aktif olduğunda.
- [[Dönder:0) anahtarstrokesin analizi[[Dönetici: Anahtarların basıldığı oturum açmazsınız. Kullanıcı tercihlerini öğrenmeniz gerekir (örneğin, sık sık kullanılan semboller), verileri sadece yerel olarak açık bir açıklama ve bir opt-out seçeneği ile saklayın.
- [FONT:0) Veri koleksiyonu için bir toggle (): Eğer klavyeniz özel karakter güncellemeleri için ağ kullanıyorsa, konteyner uygulamasından kolayca ulaşılabilir ve kullanıcının seçimine saygı duyar.
Kullanıcılarınızın klavyenizi etkinleştirdiğinde, iOS, klavyenin tüm anahtarstrokes toplamak için bir uyarı gösterir. Uygulamanızın yorum ve derecelendirmeleri, kullanıcıların verilerini riske atıp, App Store açıklamanızda ve konteyner uygulamasında dürüst ve şeffaflık hisseder.
Özel Karakter Access için Tasarım İpuçları
Fitts Yasası için organize semboller
En sık klavyenin merkezine veya daha kolay başparmak için alt sıraya yakın özel karakterler kullanılır. Örneğin, hedef kitleniz genellikle para para para verir, $, € ve simge katmanının ev sırasına £.
Görsel geri bildirim kullanın
Anahtar basıldığında, kısa bir popup (sistem klavyenin karakter önizlemesi gibi) girişleri doğrulamak için. Bu özellikle küçük semboller için faydalıdır.Her anahtar için "UIControl" tuşuna girin ve anahtarın üzerindeki bir magnified versiyonunu gösterir.
Semboller için bir Auto-Advance özelliği ekleyin
Özel bir karakter ekledikten sonra, birçok kullanıcı klavyenin mektup katmanına otomatik olarak geri dönmesini bekler. Bu davranışı konteyner uygulamasında bir seçenekle kaçırabilirsiniz. Bu, mektup ve sembollerin bir karışımını daha hızlı bir şekilde yazar.
Destek Accessabilityability
VoiceOver'un tüm anahtarlarını okuyabilmesini sağlayın. Her anahtar düğmesine karakter veya ismini (örneğin, “tehdit riski” *) Ana Sayfadaki kullanıcılar için de açık bir açıklama sağlar.
Ek düşünceler
Performans Optimizasyonu Performans Optimizasyonu
Klavye uzantıları hafızaya dayalı bir ortamda çalışır. ağır görüntüler veya karmaşık animasyonlar yüklemeden kaçının. hafif "UIButton' subclasses veya "UICollectionView' for effective yeniden.In older devices, form a full network of 30+ keys should be correct. Profile your extension with Instruments to check for framework drop.
Yerelleşme Yerelleşme
Eğer klavyeniz birden çok dili desteklerse, yerelleştirilmiş sembolü setlerini dikkate alın. Örneğin, bir Fransız kullanıcının “Defaults’a ortak bir süit (tekleme) ihtiyacı olduğunda, Ö, Ü. “PrimaryLanguage’ anahtarını varsayılan dilde ipucu için kullanın, ancak kullanıcıların “Defaults’a ortak bir paketi (tekleme App Grupları ile geçiş) izin verin, böylece uzatma tercihi okuyabiliyor.
App Store Review
Apple, normal uygulamalardan daha katı şekilde klavyenizin çökmesini sağlamak, saldırgan içerik içermemek ve devre dışı bırakmaktan kaçının.Sağdaki reklam pankartları veya promosyonlar kaçının.Eğer klavyeniz herhangi bir nedenden dolayı ağ erişimi gerektirirse, inceleme sürecinde haklı çıkarmaya hazır olun.
Güncellemeler ve Bakım
Yeni iOS versiyonları, klavye uzantılarının sistemle nasıl etkileşime girdiğini değiştirebilir. Beta sürümlerinde uzantınızı test edin ve güncelleme "UIInputView Controller' yöntemi uygulamaları gerekli olarak değiştirilebilir. Örneğin, iOS 16, iPad'lerde uzun klavyeler için yeni klavye düzeni API'leri tanıttı.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
iOS'ta özel bir klavye uygulamak, sembolleri, aksanmış mektuplar veya emojilere ihtiyaç duyan kullanıcılar için, sezgisel uzun baskı erişimi ve sağlam giriş işlemleri ile basit bir şekilde genişletilebilir.Sistem klavyesi hemen yüzeyle test eder.Özel klavye, kolayca tasarlandığında, basit olmayan karakterler için temel bir araç haline gelebilir.
Daha fazla okuma için, resmi Apple belgesine (İngilizce) başvurunuz:0) Özel bir klavye).