Xamarin'de tvOS için Siri Remote ve Bluetooth Denetleyicileri
Xamarin.tvOS uygulamanızın kullanıcıları, cihazın ekranındaki görüntülere dokunduğu iOS ile olduğu gibi doğrudan arabirimiyle etkileşim kurmaz, siri remote kullanarak dolaylı olarak odanın her yerinden etkileşim kurar.
Uygulamanız bir oyunsa, isteğe bağlı olarak uygulamanızda 3. taraf, Made For iOS (MFI) Bluetooth Oyun Kumandaları için destek oluşturabilirsiniz.
Bu makalede Siri Uzak, Dokunmatik Yüzey Hareketleri ve Siri Uzak Düğmeleri açıklanır ve Hareket ve Görsel Taslaklar, Hareketler ve Kod ve Düşük Düzey Olay İşleme aracılığıyla bunlarla nasıl çalışıldığı gösterilir. Son olarak, Xamarin.tvOS uygulamasında Oyun Kumandalarıyla Çalışma konusunu ele alır.
The Siri Remote
Kullanıcıların Apple TV ve Xamarin.tvOS uygulamanızla etkileşim kurmasının ana yolu, dahil edilen Siri Remote'dan geçer. Apple, kanepede oturan kullanıcı ile TV ekranında odada görüntülenen Apple TV'nin kullanıcı arabirimi arasındaki mesafeyi köprüleyecek şekilde uzaktan kumandayı tasarladı.
TvOS uygulama geliştiricisi olarak karşılaştığınız zorluk, Siri Remote'un dokunmatik yüzeyi, ivmeölçer, jiroskop ve düğmelerinden yararlanan hızlı, kullanımı kolay ve görsel olarak ilgi çekici bir kullanıcı arabirimi oluşturmaktır.
Siri Remote, tvOS uygulamanızda aşağıdaki özelliklere ve beklenen kullanımlara sahiptir:
Özellik | Genel Uygulama Kullanımı | Oyun Uygulaması Kullanımı |
---|---|---|
Surface'a dokunun Gezinmek için çekin, bağlam menülerini seçmek ve basılı tutmak için basın. |
Dokunma/Çekme Odaklanabilir öğeler arasında kullanıcı arabirimi gezintisi. Tıklatın Seçili (odaktaki) öğeyi etkinleştirir. |
Dokunma/Çekme Oyun tasarımına bağlıdır ve kenarlara dokunarak D-Pad olarak kullanılabilir. Tıklatın Birincil düğme işlevini gerçekleştirin. |
Menü Önceki ekrana veya menüye dönmek için basın. |
Önceki ekrana döner ve ana uygulama ekranından Apple TV Giriş ekranına çıkar. | Oyunu duraklatıp sürdürür, önceki ekrana döner ve ana uygulama ekranından Apple TV Giriş ekranına çıkar. |
Siri/Arama Siri'nin olduğu ülkelerde ses denetimi için basılı tutun, diğer tüm ülkelerde Arama Ekranı görüntülenir. |
yok | yok |
Yürüt/Duraklat Medyayı Yürüt ve Duraklat veya uygulamalarda ikincil bir işlev sağlar. |
Medya kayıttan yürütmeyi başlatır ve kayıttan yürütmeyi duraklatır/sürdürür. | İkincil düğme işlevi gerçekleştirir veya tanıtım videosunu atlar (varsa). |
Giriş Sayfası Giriş ekranına dönmek için basın, çalışan uygulamaları görüntülemek için çift tıklayın, uyku cihazına basılı tutun. |
yok | yok |
Hacim Bağlı ses/video ekipmanı ses düzeyini denetler. |
yok | yok |
Dokunmatik Yüzey Hareketleri
Siri Remote'un Dokunmatik Yüzeyi, Xamarin.tvOS uygulamanızda yanıt verebileceğiniz çeşitli tek parmak hareketlerini algılayabilir:
Çekme | İleri'ye | Dokunma |
---|---|---|
![]() |
![]() |
![]() |
Seçimi (odağı) ekrandaki kullanıcı arabirimi öğeleri arasında (yukarı, sol, sağ) taşır. Çekme, eylemsizlik kullanılarak büyük içerik listelerinde hızla gezinmek için kullanılabilir. | Seçili (odaktaki) öğeyi etkinleştirir veya bir oyundaki birincil düğme gibi davranır. Tıklayıp basılı tutmak bağlam menülerini veya ikincil işlevleri etkinleştirebilir. | Kenarlardaki Dokunmatik Yüzey'e hafifçe dokunarak, dokunulduğu alana bağlı olarak odağı yukarı, aşağı, sola veya sağa hareket ettiren D-Pad'de yön düğmeleri gibi hareket eder. Uygulamaya bağlı olarak, gizli denetimleri ortaya çıkarmak için kullanılabilir. |
Apple, Touch Surface hareketleriyle çalışmak için aşağıdaki önerileri sağlar:
- Tıklamalar ve Dokunmalar Arasında Ayrım - Tıklamak, kullanıcı tarafından yapılan kasıtlı bir eylemdir ve bir oyunun seçimi, etkinleştirmesi ve birincil düğmesi için çok uygundur. Dokunma daha hafiftir ve kullanıcı genellikle Siri Remote'u elinde tuttuğundan ve yanlışlıkla bir Dokunma olayını kolayca etkinleştirebildiğinden, tedbirli bir şekilde kullanılmalıdır.
- Standart Hareketleri Yeniden Tanımlama - Kullanıcının belirli hareketlerin belirli eylemleri gerçekleştirmesi beklentisi vardır; uygulamanızda bu hareketlerin anlamını veya işlevini yeniden tanımlamamalısınız. Tek istisna, etkin oyun sırasında bir oyun uygulamasıdır.
- Yeni Hareketleri Tedbirli Bir Şekilde Tanımlama - Kullanıcının da belirli hareketlerin belirli eylemleri gerçekleştireceği beklentisi vardır. Standart eylemler gerçekleştirmek için özel hareketler tanımlamaktan kaçınmanız gerekir. Ve yine, oyunlar özel hareketlerin oyuna eğlenceli, çevreleyici bir oyun ekleyebildiği en olağan istisnadır.
- Uygunsa, D-Pad Dokunmalarına Yanıt Ver - Dokunmatik Yüzey'in köşe kenarlarına hafifçe dokunulduğunda, odağı veya yönü yukarı, aşağı, sola veya sağa hareket ettiren bir oyun kumandası üzerindeki D-Pad gibi tepki verir. Uygunsa, uygulamanızda veya oyununuzda bu hareketlere yanıt vermelisiniz.
Siri Uzak Düğmeleri
Touch Surface'taki hareketlere ek olarak, uygulamanız kullanıcının Touch Surface'a tıklamasına veya Oynat/Duraklat düğmesine basmasına yanıt verebilir. Oyun Kumandası Çerçevesi'ni kullanarak Siri Remote'a erişiyorsanız, basılan Menü düğmesini de algılayabilirsiniz.
Ayrıca, standart UIKit
öğelerle bir Hareket Tanıma kullanılarak menü düğmesine basılması algılanabilir. Basılmakta olan Menü düğmesine müdahale ederseniz, geçerli Görünüm ve Görünüm Denetleyicisi'ni kapatmak ve öncekine dönmek sizin sorumluluğundadır.
Önemli
Uzak taraftaki Yürüt/Duraklat düğmesine her zaman bir işlev atamanız gerekir. İşlevsel olmayan bir düğmeye sahip olmak, uygulamanızın son kullanıcıya bozuk görünmesine neden olabilir. Bu düğme için geçerli bir işleviniz yoksa, birincil düğmeyle aynı işlevi atayın (Dokunmatik Yüzey Tıklama).
Hareketler ve Görsel Taslaklar
Xamarin.tvOS uygulamanızda Siri Remote ile çalışmanın en kolay yolu, Arabirim Tasarım Aracı görünümlerinize Hareket Tanıyıcıları eklemektir.
Hareket Tanıyıcısı eklemek için aşağıdakileri yapın:
Çözüm Gezgini, dosyaya
Main.storyboard
çift tıklayın ve Arabirim Tasarım Aracı düzenlemek üzere açın.Kitaplıktan Dokunma Hareketi Tanıyıcısı'nısürükleyip Görünüm'e bırakın:
Öznitelik Denetçisi'nin Düğme bölümünde Seç'i işaretleyin:
Seç, hareketin kullanıcının Siri Remote'ta Touch Surface'a tıklamasına yanıt vereceği anlamına gelir. Menü, Yürüt/Duraklat, Yukarı, Aşağı, Sol ve Sağ düğmelerine de yanıt verme seçeneğiniz vardır.
Ardından, Dokunma Hareketi Tanıyıcısı'ndan bir Eylem ayarlayın ve şunu çağırın
TouchSurfaceClicked
:Değişikliklerinizi kaydedin ve Mac için Visual Studio dönün.
Görünüm Denetleyicisi (örnek FirstViewController.cs
) dosyanızı düzenleyin ve tetiklenen hareketi işlemek için aşağıdaki kodu ekleyin:
using System;
using UIKit;
namespace tvRemote
{
public partial class FirstViewController : UIViewController
{
...
#region Custom Actions
partial void TouchSurfaceClicked (Foundation.NSObject sender) {
// Handle click here
...
}
#endregion
}
}
Görsel Taslaklarla çalışma hakkında daha fazla bilgi için lütfen Hello, tvOS Hızlı Başlangıç Kılavuzu'na bakın. Özellikle Kullanıcı Arabirimi Oluşturma ve Çıkışlar ve eylemlerle Kod Yazma bölümleri.
Hareketler ve Kod
İsteğe bağlı olarak, doğrudan C# kodunda hareketler oluşturabilir ve bunları Kullanıcı Arabiriminizdeki görünümlere ekleyebilirsiniz. Örneğin, bir dizi Çekme Hareketi Tanıyıcısı eklemek için Görünüm Denetleyicinizi düzenleyin ve aşağıdaki kodu ekleyin:
using System;
using UIKit;
namespace tvRemote
{
public partial class SecondViewController : UIViewController
{
#region Constructors
public SecondViewController (IntPtr handle) : base (handle)
{
}
#endregion
#region Override Methods
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Wire-up gestures
var upGesture = new UISwipeGestureRecognizer (() => {
RemoteView.ArrowPressed = "Up";
ButtonLabel.Text = "Swiped Up";
}) {
Direction = UISwipeGestureRecognizerDirection.Up
};
this.View.AddGestureRecognizer (upGesture);
var downGesture = new UISwipeGestureRecognizer (() => {
RemoteView.ArrowPressed = "Down";
ButtonLabel.Text = "Swiped Down";
}) {
Direction = UISwipeGestureRecognizerDirection.Down
};
this.View.AddGestureRecognizer (downGesture);
var leftGesture = new UISwipeGestureRecognizer (() => {
RemoteView.ArrowPressed = "Left";
ButtonLabel.Text = "Swiped Left";
}) {
Direction = UISwipeGestureRecognizerDirection.Left
};
this.View.AddGestureRecognizer (leftGesture);
var rightGesture = new UISwipeGestureRecognizer (() => {
RemoteView.ArrowPressed = "Right";
ButtonLabel.Text = "Swiped Right";
}) {
Direction = UISwipeGestureRecognizerDirection.Right
};
this.View.AddGestureRecognizer (rightGesture);
}
#endregion
}
}
Alt Düzey Olay İşleme
Xamarin.tvOS uygulamanızda (örneğin UIView
) temel alan UIKit
bir özel tür oluşturuyorsanız, etkinlikler aracılığıyla UIPress
düğme basıldığında alt düzey işleme olanağı da sağlayabilirsiniz.
Olay UIPress
, iOS için bir UITouch
olayın ne olduğu tvOS'a yöneliktir, ancak UIPress
Siri Remote veya diğer bağlı Bluetooth cihazlarında (Oyun Kumandası gibi) düğme basmaları hakkında bilgi döndürür. UIPress
olaylar, basılmakta olan düğmeyi ve durumunu (Başladı, İptal Edildi, Değiştirildi veya Sona Erdi) açıklar.
Bluetooth Oyun Kumandaları gibi cihazlardaki analog düğmeler için, UIPress
düğmeye uygulanan kuvvet miktarını da döndürür. Type
olayın özelliği hangi fiziksel düğmenin UIPress
durumunu değiştirdiğini tanımlarken, diğer özelliklerde gerçekleşen değişiklik açıklanır.
Aşağıdaki kod, bir için alt düzey UIPress
olayları işleme örneğini UIView
gösterir:
using System;
using Foundation;
using UIKit;
namespace tvRemote
{
public partial class EventView : UIView
{
#region Computed Properties
public override bool CanBecomeFocused {
get {
return true;
}
}
#endregion
#region
public EventView (IntPtr handle) : base (handle)
{
}
#endregion
#region Override Methods
public override void PressesBegan (NSSet<UIPress> presses, UIPressesEvent evt)
{
base.PressesBegan (presses, evt);
foreach (UIPress press in presses) {
// Was the Touch Surface clicked?
if (press.Type == UIPressType.Select) {
BackgroundColor = UIColor.Red;
}
}
}
public override void PressesCancelled (NSSet<UIPress> presses, UIPressesEvent evt)
{
base.PressesCancelled (presses, evt);
foreach (UIPress press in presses) {
// Was the Touch Surface clicked?
if (press.Type == UIPressType.Select) {
BackgroundColor = UIColor.Clear;
}
}
}
public override void PressesChanged (NSSet<UIPress> presses, UIPressesEvent evt)
{
base.PressesChanged (presses, evt);
}
public override void PressesEnded (NSSet<UIPress> presses, UIPressesEvent evt)
{
base.PressesEnded (presses, evt);
foreach (UIPress press in presses) {
// Was the Touch Surface clicked?
if (press.Type == UIPressType.Select) {
BackgroundColor = UIColor.Clear;
}
}
}
#endregion
}
}
Olaylarda UITouch
olduğu gibi, olay geçersiz kılmalarından herhangi birini UIPress
uygulamanız gerekiyorsa, dörtünü de uygulamanız gerekir.
Bluetooth Oyun Kumandaları
Apple TV ile birlikte gelen standart Siri Remote'a ek olarak, 3. taraf, Made For iOS (MFI) Bluetooth Oyun Kumandaları Apple TV ile eşleştirilebilir ve Xamarin.tvOS uygulamanızı kontrol etmek için kullanılabilir.
Oyun Kumandaları oyunu geliştirmek ve bir oyuna daldırma hissi sağlamak için kullanılabilir. Ayrıca standart Apple TV arabirimini kontrol etmek için de kullanılabilir, böylece kullanım uzak ile denetleyici arasında geçiş yapmak zorunda değildir.
Önemli
Bluetooth Oyun Kumandaları, son kullanıcıların gerçekleştirebileceği isteğe bağlı bir satın alma işlemidir; uygulamanız kullanıcıyı satın almak için zorlayamaz. Uygulamanız Oyun Kumandalarını destekliyorsa, oyunun tüm Apple TV kullanıcıları tarafından kullanılabilmesi için Siri Remote'un da destekleniyor olması gerekir.
Oyun Kumandası, tvOS uygulamanızda aşağıdaki özelliklere ve beklenen kullanımlara sahiptir:
Özellik | Genel Uygulama Kullanımı | Oyun Uygulaması Kullanımı |
---|---|---|
D-Pad | Kullanıcı arabirimi öğelerinde gezinirken (odağı değiştirir). | Oyuna bağlı. |
A | Seçili (odaktaki) öğeyi etkinleştirir. | Birincil düğme işlevini gerçekleştirir ve iletişim kutusu eylemlerini onaylar. |
B | Önceki ekrana döner veya uygulamanın ana ekranındaysa Giriş ekranından çıkar. | İkincil düğme işlevini gerçekleştirir veya önceki ekrana döner. |
X | Medya kayıttan yürütmeyi başlatır veya kayıttan yürütmeyi duraklatır/sürdürür. | Oyuna bağlı. |
Y | yok | Oyuna bağlı. |
Menü | Önceki ekrana döner veya uygulamanın ana ekranındaysa Giriş ekranından çıkar. | Oyunu duraklatma/sürdürme, önceki ekrana dönme veya uygulamanın ana ekranındaysa Giriş ekranından çıkma. |
Sol Omuz Düğmesi | Sola gider. | Oyuna bağlı. |
Sol Tetikleyici | Sola gider. | Oyuna bağlı. |
Sağ Omuz Düğmesi | Sağa gider. | Oyuna bağlı. |
Sağ Tetikleyici | Sağa Gider | Oyuna bağlı. |
Sol Parmak Çubuğu | Kullanıcı arabirimi öğelerinde gezinirken (odağı değiştirir). | Oyuna bağlı. |
Sağ Parmak Çubuğu | yok | Oyuna bağlı. |
Apple, Oyun Kumandaları ile çalışmak için aşağıdaki önerileri sağlar:
- Oyun Kumandası Bağlan ions onaylayın - tvOS uygulamanız istediğiniz zaman son kullanıcı tarafından başlatılabilir ve durdurulabilir. Uygulama başlangıç veya uyanıklık zamanlarında her zaman Oyun Kumandası olup olmadığını kontrol etmeli ve gerektiğinde harekete geçmelisiniz.
- Uygulamanızın hem Siri Remote hem de Game Controller'larda çalıştığından emin olun - Kullanıcıların uygulamanızı kullanmak için Siri Remote ile Oyun Kumandası arasında geçiş yapmalarını zorunlu etmeyin. Her şeyin kolayca gezinildiğinden ve beklendiği gibi çalıştığından emin olmak için uygulamanızı her iki denetleyici türüyle de sık sık test edin.
- Bir Geri Dönüş Yolu Sağlayın - Menü düğmesine basmak her zaman önceki ekrana dönmelidir. Kullanıcı ana uygulama ekranındaysa, Menü düğmesi bunları Apple TV Giriş ekranına döndürmelidir. Oyun sırasında, Menü düğmesi kullanıcıya oyunu duraklatma/sürdürme veya ana menüye geri dönme olanağı veren bir uyarı görüntülemelidir.
Oyun Kumandalarıyla Çalışma
Yukarıda belirtildiği gibi, Apple TV ile birlikte gelen standart Siri Remote'a ek olarak, kullanıcı isteğe bağlı olarak bir 3. taraf, Made For iOS (MFI) Bluetooth Oyun Kumandaları ekleyebilir ve Xamarin.tvOS uygulamanızı kontrol etmek için kullanabilir.
Uygulamanız düşük düzeyli denetleyici girişi gerektiriyorsa, apple'ın tvOS için aşağıdaki değişiklikleri içeren Game Controller Framework'lerini kullanabilirsiniz:
- Siri Remote'un hedefine Mikro Oyun Kumandası profili (
GCMicroGamepad
) eklendi. - Yeni
GCEventViewController
sınıf, oyun denetleyicisi olaylarını uygulamanız üzerinden yönlendirmek için kullanılabilir. Daha fazla ayrıntı için aşağıdaki Oyun Kumandası Girişini Belirleme bölümüne bakın.
Oyun Kumandası Destek Gereksinimleri
Xamarin.tvOS uygulamanız Oyun Kumandalarını destekliyorsa Apple'ın karşılanması gereken birkaç özel gereksinimi vardır:
- Siri Remote'ı Desteklemeniz Gerekir - Siri Remote'ı her zaman desteklemeniz gerekir. Oyununuz 3. taraf Oyun Kumandası'nın oynanabilir olmasını gerektiremez.
- Genişletilmiş Kontrol Düzenini Desteklemeniz Gerekir - Tüm tvOS Oyun Kumandaları uygun olmayan, genişletilmiş denetleyicilerdir.
- Oyunlar Tek Başına Oyun Kumandalarıyla Oynanabilir Olmalıdır - Uygulamanız Genişletilmiş Oyun Kumandası destekliyorsa, yalnızca bu Oyun Kumandası ile oynanabilir olmalıdır.
- Oynat/Duraklat Düğmesini Desteklemeniz Gerekir - Oyun sırasında, kullanıcı Oynat/Duraklat düğmesine basarsa, kullanıcıya oyunu duraklatma/sürdürme veya ana menüye geri dönme olanağı veren bir uyarı görüntülemeniz gerekir.
Oyun Denetleyicisi Desteğini Etkinleştirme
Xamarin.tvOS uygulamanızda Oyun Denetleyicisi desteğini etkinleştirmek için Çözüm Gezgini dosyaya çift tıklayarak Info.plist
düzenlemek üzere açın:
Oyun Kumandası bölümünde, Oyun Kumandalarını Etkinleştir'e göre bir denetim yapın, ardından uygulama tarafından desteklenecek tüm Oyun Kumandası türlerini denetleyin.
Siri Remote'un Oyun Kumandası Olarak Kullanılması
Apple TV ile birlikte gelen Siri Remote, sınırlı bir Oyun Kumandası olarak kullanılabilir. Diğer Oyun Kumandaları gibi, Game Controller Framework'te bir GCController
nesne olarak gösterilir ve hem hem GCMicroGamepad
de GCMotion
profillerini destekler.
Siri Remote, Oyun Kumandası olarak kullanılırken aşağıdaki özelliklere sahiptir:
- Touch Surface, analog giriş verileri sağlayan bir D-pad olarak kullanılabilir.
- Uzak, dikey veya yatay yönlendirmede kullanılabilir ve uygulamanız profil nesnesinin giriş verilerini otomatik olarak çevirip çevirmeyeceğine karar verir.
- Touch Surface'a tıklanması, Oyun Kumandası'nda A düğmesine basmak gibi davranır.
- Oynat/Duraklat düğmesi, Oyun Kumandası'nda X düğmesi gibi davranır.
- Menü düğmesi, kullanıcıya oyunu duraklatma/sürdürme veya ana menüye geri dönme olanağı veren bir uyarı görüntülemelidir.
Oyun Kumandası Girişini Belirleme
Oyun Kumandası olaylarının Dokunmatik olaylarla paralel olarak alınabildiği iOS'un aksine, tvOS üst düzey olaylar sunmak UIKit
için tüm alt düzey olayları işler. Sonuç olarak, düşük düzey Oyun Kumandası olaylarına erişmeniz gerekiyorsa, 'nin varsayılan davranışını kapatmanız UIKit
gerekir.
tvOS'ta, Oyun Kumandası girişini doğrudan işlemek istediğinizde, oyunun Kullanıcı Arabirimini görüntülemek için bir GCEventViewController
(veya alt sınıf) kullanmanız gerekir. GCEventViewController
a, İlk Yanıtlayıcı olduğunda, Oyun Kumandası girişi yakalanır ve Oyun Denetleyicisi Çerçevesi aracılığıyla uygulamanıza teslim edilir.
Olayların işlenme ve işlenme şeklini değiştirmek için sınıfının özelliğini GCEventViewController
kullanabilirsinizUserInteractionEnabled
.
Oyun Kumandası desteği uygulama hakkında bilgi için lütfen tvOS ve Oyun Kumandası Programlama Kılavuzu'nun Uygulama Programlama Kılavuzu'ndaki Apple'ın Oyun Kumandalarıyla Çalışma bölümüne bakın.
Özet
Bu makalede Apple TV, Touch Surface hareketleri ve Siri Remote düğmeleriyle birlikte gelen yeni Siri Remote ele alınmıştır. Daha sonra hareketler ve Görsel Taslaklar, hareketler, kod ve alt düzey olaylarla çalışmayı ele alır. Son olarak, Oyun Kumandaları ile çalışma konusu ele alındıysa.