Aracılığıyla paylaş


Xamarin.iOS'ta Birleşik Görsel Taslaklar

iOS 8, kullanıcı arabirimini (birleşik görsel taslak) oluşturmak için yeni, daha basit bir kullanım mekanizması içerir. Farklı donanım ekran boyutlarının tümünü kapsayan tek bir görsel taslak ile hızlı ve duyarlı görünümler "bir kez tasarla, çok kullan" stilinde oluşturulabilir.

Geliştiricinin artık i Telefon ve iPad cihazları için ayrı ve belirli bir görsel taslak oluşturması gerekmeyen bu kullanıcıların ortak bir arabirimle uygulama tasarlama ve ardından bu arabirimi farklı boyut sınıfları için özelleştirme esnekliği vardır. Bu şekilde, bir uygulama her form faktörünün güçlü yönlerine uyarlanabilir ve her kullanıcı arabirimi en iyi deneyimi sağlayacak şekilde ayarlanabilir.

Boyut Sınıfları

iOS 8'in öncesinde geliştirici, dikey ve UIInterfaceIdiom yatay modlar ile i Telefon ve iPad cihazları arasında ayrım yapmak için ve kullandıUIInterfaceOrientation. iOS8'de yönlendirme ve cihaz Boyut Sınıfları kullanılarak belirlenir.

Cihazlar hem dikey hem de yatay eksenlerde Boyut Sınıfları tarafından tanımlanır ve iOS 8'de iki tür boyut sınıfı vardır:

  • Normal – Bu, büyük bir ekran boyutu (iPad gibi) veya büyük bir boyut (örneğin, UIScrollView
  • Compact : Bu, daha küçük cihazlara (i Telefon gibi) yöneliktir. Bu boyut, cihazın yönünü dikkate alır.

İki kavram birlikte kullanılırsa, sonuç aşağıdaki diyagramda görüldüğü gibi her iki farklı yönlendirmede de kullanılabilecek farklı olası boyutları tanımlayan 2 x 2 kılavuzdur:

Normal ve Sıkıştırılmış yönlendirmelerde kullanılabilecek farklı olası boyutları tanımlayan 2 x 2 kılavuz

Geliştirici, farklı düzenlere (yukarıdaki grafiklerde görüldüğü gibi) neden olabilecek dört olasılığın herhangi birini kullanan bir Görünüm Denetleyicisi oluşturabilir.

iPad Boyut Sınıfları

iPad, boyutu nedeniyle her iki yön için de normal bir sınıf boyutuna sahiptir.

iPad Boyut Sınıfları

i Telefon Boyut Sınıfları

i Telefon, cihazın yönlendirmesine göre farklı boyut sınıflarına sahiptir:

i Telefon Boyut Sınıfları

  • Cihaz dikey moddayken, ekranın yatay ve düzenli olarak dikey olarak kompakt bir sınıfı vardır
  • Cihaz yatay moddayken ekran sınıfları dikey moddan ters çevrilir.

i Telefon 6 Artı Boyut Sınıfları

Boyutlar, dikey yöndeyken Telefon öncekilerle aynıdır, ancak yatay olarak farklıdır:

i Telefon 6 Artı Boyut Sınıfları

i Telefon 6 Plus yeterince büyük bir ekrana sahip olduğundan, Yatay modda Normal Genişlik Boyutu Sınıfına sahip olabilir.

Yeni Ekran Ölçeği desteği

i Telefon 6 Plus, 3,0 ekran ölçek faktörüne (orijinal i Telefon ekran çözünürlüğünün üç katı) sahip yeni bir Retina HD ekran kullanır. Bu cihazlarda mümkün olan en iyi deneyimi sağlamak için bu ekran ölçeği için tasarlanmış yeni resimler ekleyin. Xcode 6 ve üzerinde varlık katalogları 1x, 2x ve 3x boyutlu görüntüler içerebilir; i Telefon 6 Plus üzerinde çalışırken yeni görüntü varlıklarını eklediğinizde iOS doğru varlıkları seçer.

iOS'taki görüntü yükleme davranışı, görüntü dosyalarındaki bir @3x son eki de tanır. Örneğin, geliştirici uygulamanın paketinde şu dosya adlarına sahip bir görüntü varlığı (farklı çözünürlüklerde) içeriyorsa: MonkeyIcon.png, MonkeyIcon@2x.pngve MonkeyIcon@3x.png. i Telefon 6 Plus'taMonkeyIcon@3x.png, geliştirici aşağıdaki kodu kullanarak bir görüntü yüklerse görüntü otomatik olarak kullanılır:

UIImage icon = UIImage.FromFile("MonkeyImage.png");

Dinamik Başlatma Ekranları

Başlatma ekranı dosyası, kullanıcıya uygulamanın gerçekten başlatıldığına ilişkin geri bildirim sağlamak için bir iOS uygulaması başlatılırken giriş ekranı olarak görüntülenir. iOS 8'in öncesinde, geliştiricinin her cihaz türü, yönlendirmesi ve uygulamanın üzerinde çalıştıracağı ekran çözünürlüğü için birden çok Default.png görüntü varlığı içermesi gerekirdi.

iOS 8'de yeni olan geliştirici, Xcode'da Otomatik Düzen ve Boyut Sınıflarını kullanarak her cihaz, çözünürlük ve yönlendirme için çalışacak bir Dinamik Başlatma Ekranı oluşturan tek bir atomik .xib dosya oluşturabilir. Bu, geliştiricinin gerekli tüm görüntü varlıklarını oluşturup bakımını yapmak için gereken çalışma miktarını azaltmakla kalmaz, aynı zamanda uygulamanın yüklü paketinin boyutunu da azaltır.

Özellik

Özellikler, ortamı değiştikçe düzenin nasıl değiştiğini belirlemek için kullanılabilecek özelliklerdir. Bunlar bir özellik kümesinden ( HorizontalSizeClass ve VerticalSizeClass tabanlı UIUserInterfaceSizeClass) ve arabirim deyiminden ( UIUserInterfaceIdiom) ve görüntü ölçeğinden oluşur.

Yukarıdaki durumların tümü, Apple'ın yalnızca özellikleri değil, değerlerini de içeren Bir Özellik Koleksiyonu ( UITraitCollection) olarak başvurduğu bir kapsayıcıya sarmalanmıştır.

Özellik Ortamı

Özellik Ortamları iOS 8'de yeni bir arabirimdir ve aşağıdaki nesneler için Bir Özellik Koleksiyonu döndürebilir:

  • Ekranlar ( UIScreens ).
  • Windows ( UIWindows ).
  • Görünüm Denetleyicileri ( UIViewController ).
  • Görünümler ( UIView ).
  • Sunu Denetleyicisi ( UIPresentationController ).

Geliştirici, kullanıcı arabiriminin nasıl düzenleneceğini belirlemek için Bir Özellik Ortamı tarafından döndürülen Özellik Koleksiyonu'nu kullanır.

Tüm Özellik Ortamları, aşağıdaki diyagramda görüldüğü gibi bir hiyerarşi oluşturur:

Özellik Ortamları hiyerarşi diyagramı

Yukarıdaki Özellik Ortamlarının her birinin sahip olduğu Özellik Koleksiyonu varsayılan olarak üst öğeden alt ortama akacaktır.

Özellik Ortamı, geçerli Özellik Koleksiyonunu almaya ek olarak Görünüm veya Görünüm Denetleyicisi alt sınıflarında geçersiz kılınabilen bir TraitCollectionDidChange yönteme sahiptir. Geliştirici, bu özellikler değiştiğinde özelliklere bağlı kullanıcı arabirimi öğelerini değiştirmek için bu yöntemi kullanabilir.

Tipik Özellik Koleksiyonları

Bu bölümde, kullanıcının iOS 8 ile çalışırken karşılaşacağı tipik özellik koleksiyonları türleri ele alınacaktır.

Aşağıda, geliştiricinin i Telefon üzerinde görebileceği tipik bir Özellik Koleksiyonu verilmiştir:

Özellik Değer
HorizontalSizeClass Compact
VerticalSizeClass Normal
UserInterfaceIdom Phone
DisplayScale 2.0

Yukarıdaki küme, tüm özellik özellikleri için değerlere sahip olduğu için Tam Nitelenmiş Özellik Koleksiyonunu temsil eder.

Bazı değerlerini (Apple'ın belirtilmemiş olarak ifade ettiği) eksik bir Özellik Koleksiyonuna sahip olmak da mümkündür:

Özellik Değer
HorizontalSizeClass Compact
VerticalSizeClass Belirtilme -miş
UserInterfaceIdom Belirtilme -miş
DisplayScale Belirtilme -miş

Ancak genellikle geliştirici, Özellik Ortamı'na Özellik Koleksiyonunu sorduğunda, yukarıdaki örnekte görüldüğü gibi tam bir koleksiyon döndürür.

Özellik Ortamı (Görünüm veya Görünüm Denetleyicisi gibi) geçerli görünüm hiyerarşisinin içinde değilse, geliştirici bir veya daha fazla özellik özelliği için belirtilmemiş değerleri geri alabilir.

Geliştirici, yeni bir koleksiyon oluşturmak için Apple tarafından sağlanan oluşturma yöntemlerinden birini (örneğin UITraitCollection.FromHorizontalSizeClass, ) kullanırsa kısmen nitelenmiş bir Özellik Koleksiyonu da alır.

Birden çok Özellik Koleksiyonunda gerçekleştirilebilecek işlemlerden biri, bunları birbiriyle karşılaştırmaktır. Bu işlem, bir Trait Collection'ın başka bir tane içerip içermediğini sormayı içerir. Kapsama'nın amacı, ikinci koleksiyonda belirtilen herhangi bir özellik için değerin ilk koleksiyondaki değerle tam olarak eşleşmesi gerektiğidir.

İki özelliği test etmek için test edilecek özelliğin değerini geçirme yöntemini UITraitCollection kullanınContains.

Geliştirici, Görünümlerin nasıl düzenleneceğini veya Denetleyicileri Görüntülemenin nasıl yapılacağını belirlemek için kodda karşılaştırmaları el ile gerçekleştirebilir. Ancak, UIKit örneğin Görünüm Ara Sunucusu'nda olduğu gibi işlevlerinin bir kısmını sağlamak için bu yöntemi dahili olarak kullanır.

Görünüm Ara Sunucusu

Görünüm Ara Sunucusu, geliştiricilerin Görünümlerinin özelliklerini özelleştirmesine izin vermek için iOS'un önceki sürümlerinde tanıtıldı. Özellik Koleksiyonlarını desteklemek için iOS 8'de genişletilmiştir.

Görünüm Proxy'leri artık geçirilen belirli Bir Özellik Koleksiyonu için yeni bir Görünüm Ara Sunucusu döndüren yeni bir yöntemi AppearanceForTraitCollectioniçerir. Geliştiricinin bu Görünüm Ara Sunucusu üzerinde gerçekleştirdiği tüm özelleştirmeler yalnızca belirtilen Özellik Koleksiyonuna uygun Görünümler üzerinde geçerli olur.

Genellikle geliştirici, uygulamadaki yatay olarak sıkıştırılmış herhangi bir görünümü özelleştirebilmesi için AppearanceForTraitCollection yalnızca Yatay Boyut Sınıfını belirten bir Özellik Koleksiyonu gibi kısmen belirtilen bir Özellik Koleksiyonu'nu yöntemine geçirir.

UIImage

Apple'ın Özellik Koleksiyonu'nu eklediği bir diğer sınıf ise ' dir UIImage. Geçmişte geliştiricinin uygulamaya dahil edecekleri bit eşlemli grafik varlığının (simge gibi) @1X ve @2x sürümünü belirtmesi gerekiyordu.

iOS 8, geliştiricinin Bir Görüntü Kataloğu'nda Bir Özellik Koleksiyonuna dayalı olarak görüntünün birden çok sürümünü eklemesine olanak tanıyacak şekilde genişletildi. Örneğin geliştirici, Compact Trait Sınıfı ile çalışmak için daha küçük bir görüntü ve diğer koleksiyonlar için tam boyutlu bir görüntü içerebilir.

Görüntülerden biri bir UIImageView sınıfın içinde kullanıldığında, Görüntü Görünümü otomatik olarak görüntünün Nitelik Koleksiyonu için doğru sürümünü görüntüler. Özellik Ortamı değişirse (örneğin, kullanıcı cihazı dikeyden yataya değiştirirse), Görüntü Görünümü yeni Özellik Koleksiyonu ile eşleşecek şekilde yeni görüntü boyutunu otomatik olarak seçer ve boyutunu görüntülenen görüntünün geçerli sürümüyle eşleşecek şekilde değiştirir.

UIImageAsset

Apple, geliştiriciye görüntü seçimi üzerinde daha fazla denetim sağlamak için iOS 8'e adlı UIImageAsset yeni bir sınıf ekledi.

Görüntü Varlığı, görüntünün tüm farklı sürümlerini sarmalar ve geliştiricinin geçirilen Bir Özellik Koleksiyonu ile eşleşen belirli bir görüntüyü istemesine olanak tanır. Görüntü Varlığından anlık olarak resimler eklenebilir veya kaldırılabilir.

Görüntü Varlıkları hakkında daha fazla bilgi için Apple'ın UIImageAsset belgelerine bakın.

Özellik Koleksiyonlarını Birleştirme

Bir geliştiricinin Özellik Koleksiyonları üzerinde gerçekleştirebileceği bir diğer işlev de, bir koleksiyondaki belirtilmeyen değerlerin ikinci bir koleksiyondaki belirtilen değerlerle değiştirildiği birleştirilmiş koleksiyonla sonuçlanacak iki işlev eklemektir. Bu, sınıfının yöntemi UITraitCollection kullanılarak FromTraitsFromCollections yapılır.

Yukarıda belirtildiği gibi, niteliklerden herhangi biri Özellik Koleksiyonlarından birinde belirtilmezse ve başka bir koleksiyonda belirtilirse, değer belirtilen sürüme ayarlanır. Ancak, belirtilen bir değerin birden çok sürümü varsa, son Özellik Koleksiyonundaki değer kullanılan değer olacaktır.

Uyarlamalı Görünüm Denetleyicileri

Bu bölümde, geliştirici uygulamalarında otomatik olarak daha uyarlamalı olmak için iOS Görünüm ve Görünüm Denetleyicilerinin Özellikler ve Boyut Sınıfları kavramlarını nasıl benimsediği ayrıntıları ele alınacaktır.

Bölünmüş Görünüm Denetleyicisi

iOS 8'de en çok değişen Görünüm Denetleyicisi sınıflarından biri sınıfıdır UISplitViewController . Geçmişte geliştirici genellikle uygulamanın iPad sürümünde Bölünmüş Görünüm Denetleyicisi kullanır ve ardından uygulamanın i Telefon sürümü için görünüm hiyerarşisinin tamamen farklı bir sürümünü sağlaması gerekirdi.

iOS 8'de, UISplitViewController sınıfı her iki platformda da (iPad ve i Telefon) kullanılabilir. Bu, geliştiricinin hem i Telefon hem de iPad için çalışacak bir Görünüm Denetleyicisi hiyerarşisi oluşturmasına olanak tanır.

i Telefon Yatay'dayken Bölünmüş Görünüm Denetleyicisi, Görünümlerini iPad'de gösterildiği gibi yan yana gösterir.

Özellikleri Geçersiz Kılma

Özellik Ortamları, iPad'deki Bölünmüş Görünüm Denetleyicisini yatay yönde gösteren aşağıdaki grafikte olduğu gibi üst kapsayıcıdan alt kapsayıcılara doğru art arda gelir:

Yatay yönde iPad'de Bölünmüş Görünüm Denetleyicisi

iPad'in hem yatay hem de dikey yönlendirmelerinde Normal Boyut Sınıfı olduğundan Bölünmüş Görünüm hem ana hem de ayrıntı görünümlerini görüntüler.

Boyut Sınıfı'nın her iki yönde de sıkıştırıldığı i Telefon, Bölünmüş Görünüm Denetleyicisi aşağıda gösterildiği gibi yalnızca ayrıntı görünümünü görüntüler:

Bölünmüş Görünüm Denetleyicisi yalnızca ayrıntı görünümünü görüntüler

Geliştiricinin i Telefon üzerinde hem ana hem de ayrıntı görünümünü yatay yönde görüntülemek istediği bir uygulamada, geliştiricinin Bölünmüş Görünüm Denetleyicisi için bir üst kapsayıcı eklemesi ve Özellik Koleksiyonunu geçersiz kılması gerekir. Aşağıdaki grafikte görüldüğü gibi:

Geliştiricinin Bölünmüş Görünüm Denetleyicisi için bir üst kapsayıcı eklemesi ve Trait Collection'ı geçersiz kılması gerekir

A UIView , Bölünmüş Görünüm Denetleyicisi'nin üst öğesi olarak ayarlanır ve SetOverrideTraitCollection yeni bir Özellik Koleksiyonu geçirip Bölünmüş Görünüm Denetleyicisi'ni hedefleyen görünümde yöntemi çağrılır. Yeni Özellik Koleksiyonu, öğesini olarak ayarlayarakRegular, Bölünmüş Görünüm Denetleyicisi'nin i Telefon yatay yönde hem ana hem de ayrıntı görünümlerini görüntülemesini sağlarHorizontalSizeClass.

öğesinin VerticalSizeClass olarak ayarlandığını unspecifiedve bu sayede yeni Trait Collection'ın üst öğedeki Trait Collection'a eklenmesini sağladığını ve bunun sonucunda alt Bölünmüş Görünüm Denetleyicisi için bir Compact VerticalSizeClass oluşturulduğuna dikkat edin.

Özellik Değişiklikleri

Bu bölüm, Özellik Ortamı değiştiğinde Özellik Koleksiyonlarının nasıl geçiş yapacağına ayrıntılı olarak göz atacaktır. Örneğin, cihaz dikeyden yataya döndürüldüğünde.

Dikeyden yataya Özellik Değişikliklerine genel bakış

İlk olarak, iOS 8 geçişin gerçekleşmesine hazırlanmak için bazı kurulumlar yapar. Ardından, sistem geçiş durumuna animasyon ekler. Son olarak, iOS 8 geçiş sırasında gereken geçici durumları temizler.

iOS 8, geliştiricinin aşağıdaki tabloda görüldüğü gibi Özellik Değişikliğine katılmak için kullanabileceği birkaç geri çağırma sağlar:

Aşama Geri Arama Açıklama
Ayarlama
  • WillTransitionToTraitCollection
  • TraitCollectionDidChange
  • Bu yöntem, Bir Özellik Koleksiyonu yeni değerine ayarlanmadan önce Bir Özellik Değişikliğinin başında çağrılır.
  • Özellik Koleksiyonu değeri değiştiğinde ancak herhangi bir animasyon gerçekleşmeden önce yöntemi çağrılır.
Animasyon WillTransitionToTraitCollection Bu yönteme geçirilen Geçiş Düzenleyicisi, geliştiricinin varsayılan animasyonlarla birlikte yürütülecek animasyonlar eklemesini sağlayan bir AnimateAlongside özelliğe sahiptir.
Temizleme WillTransitionToTraitCollection Geçiş gerçekleştikten sonra geliştiricilerin kendi temizleme kodlarını eklemesi için bir yöntem sağlar.

Yöntemi, WillTransitionToTraitCollection Özellik Koleksiyonu değişiklikleriyle birlikte Görünüm Denetleyicilerinin animasyonunu da oluşturur. WillTransitionToTraitCollection yöntemi, gibi UIViewsdiğer Özellik Ortamlarında değil yalnızca Görünüm Denetleyicilerinde ( UIViewController) kullanılabilir.

TraitCollectionDidChange, geliştiricinin UIView özellikler değiştikçe kullanıcı arabirimini güncelleştirmek istediği sınıfla çalışmak için mükemmeldir.

Bölünmüş Görünüm Denetleyicilerini Daraltma

Şimdi Bölünmüş Görünüm Denetleyicisi iki sütundan bir sütun görünümüne daraltıldığında ne olacağına daha yakından bakalım. Bu değişikliğin bir parçası olarak gerçekleşmesi gereken iki işlem vardır:

  • Varsayılan olarak Bölünmüş Görünüm Denetleyicisi, daraltma gerçekleştikten sonra görünüm olarak birincil görünüm denetleyicisini kullanır. Geliştirici, yöntemini UISplitViewControllerDelegate geçersiz kılarak GetPrimaryViewControllerForCollapsingSplitViewController ve daraltılmış durumda görüntülemek istediği herhangi bir Görünüm Denetleyicisi sağlayarak bu davranışı geçersiz kılabilir.
  • İkincil Görünüm Denetleyicisi'nin Birincil Görünüm Denetleyicisi ile birleştirilmesi gerekir. Genellikle geliştiricinin bu adım için herhangi bir işlem gerçekleştirmesi gerekmez; Bölünmüş Görünüm Denetleyicisi, donanım cihazına göre bu aşamanın otomatik olarak işlenmesini içerir. Ancak, geliştiricinin bu değişiklikle etkileşime geçmek isteyeceği bazı özel durumlar olabilir. yöntemini çağırmak CollapseSecondViewControllerUISplitViewControllerDelegate , ayrıntılar görünümü yerine, daraltma gerçekleştiğinde ana görünüm denetleyicisinin görüntülenmesini sağlar.

Bölünmüş Görünüm Denetleyicisini Genişletme

Şimdi Bölünmüş Görünüm Denetleyicisi daraltılmış durumdan genişletildiğinde ne olduğuna daha yakından bakalım. Bir kez daha, gerçekleşmesi gereken iki aşama vardır:

  • İlk olarak yeni Birincil Görünüm Denetleyicisi'ni tanımlayın. Varsayılan olarak Bölünmüş Görünüm Denetleyicisi, daraltılmış görünümden Birincil Görünüm Denetleyicisi'ni otomatik olarak kullanır. Geliştirici yine yöntemini UISplitViewControllerDelegate kullanarak GetPrimaryViewControllerForExpandingSplitViewController bu davranışı geçersiz kılabilir.
  • Birincil Görünüm Denetleyicisi seçildikten sonra İkincil Görünüm Denetleyicisi yeniden oluşturulmalıdır. Bölünmüş Görünüm Denetleyicisi de donanım cihazına göre bu aşamanın otomatik olarak işlenmesini içerir. Geliştirici, yöntemini UISplitViewControllerDelegate çağırarak SeparateSecondaryViewController bu davranışı geçersiz kılabilir.

Bölünmüş Görünüm Denetleyicisi'nde Birincil Görünüm Denetleyicisi, ve yöntemlerini UISplitViewControllerDelegateuygulayarak görünümlerin genişletilmesinde ve SeparateSecondaryViewController daraltılmasında CollapseSecondViewController bir rol oynar. UINavigationController İkincil Görünüm denetleyicisini otomatik olarak göndermek ve açmak için bu yöntemleri uygular.

Görünüm Denetleyicilerini Gösterme

Apple'ın iOS 8'de yaptığı bir diğer değişiklik de geliştiricinin Görünüm Denetleyicileri'ni göstermesidir. Geçmişte, uygulamanın Yaprak Görünüm Denetleyicisi (Tablo Görünümü Denetleyicisi gibi) varsa ve geliştirici farklı bir görünüm göstermişse (örneğin, bir hücreye dokunan kullanıcıya yanıt olarak), uygulama denetleyici hiyerarşisi üzerinden Gezinti Görünümü Denetleyicisi'ne geri ulaşır ve yeni görünümü görüntülemek için yöntemi buna karşı çağırırdı PushViewController .

Bu, Gezinti Denetleyicisi ile içinde çalıştığı ortam arasında çok sıkı bir bağlantı sundu. iOS 8'de Apple, iki yeni yöntem sağlayarak bunu ayrılmıştır:

  • ShowViewController – Yeni görünüm denetleyicisini ortamına göre görüntüleyecek şekilde uyarlar. Örneğin, içinde UINavigationController yalnızca yeni görünümü yığına iter. Bölünmüş Görünüm Denetleyicisi'nde, yeni Görünüm Denetleyicisi yeni Birincil Görünüm Denetleyicisi olarak sol tarafta gösterilir. Kapsayıcı görünümü denetleyicisi yoksa, yeni görünüm Kalıcı Görünüm Denetleyicisi olarak görüntülenir.
  • ShowDetailViewController – ile benzer ShowViewControllerşekilde çalışır, ancak ayrıntılar görünümünü geçirilmekte olan yeni Görünüm Denetleyicisi ile değiştirmek için Bölünmüş Görünüm Denetleyicisi'nde uygulanır. Bölünmüş Görünüm Denetleyicisi daraltılırsa (i Telefon Uygulamasında görülebileceği gibi), çağrı yöntemine ShowViewController yönlendirilir ve yeni görünüm Birincil Görünüm Denetleyicisi olarak gösterilir. Yine, kapsayıcı görünümü denetleyicisi yoksa, yeni görünüm Kalıcı Görünüm Denetleyicisi olarak görüntülenir.

Bu yöntemler Yaprak Görünüm Denetleyicisi'nde başlayıp yeni görünümün görünümünü işlemek için doğru kapsayıcı görünümü denetleyicisini bulana kadar görünüm hiyerarşisinde ilerletilerek çalışır.

Geliştiriciler kendi özel Görünüm Denetleyicilerinde ve uygulayarak ShowViewController ve UISplitViewController ile sunulan otomatik işlevlerin UINavigationController aynısını elde edebilir.ShowDetailViewController

Nasıl çalışır?

Bu bölümde, bu yöntemlerin iOS 8'de nasıl uygulandığına göz atacağız. İlk olarak yeni GetTargetForAction yönteme bakalım:

Yeni GetTargetForAction yöntemi

Bu yöntem, doğru kapsayıcı görünümü denetleyicisi bulunana kadar hiyerarşi zincirini gösterir. Örneğin:

  1. Bir ShowViewController yöntem çağrılırsa, bu yöntemi uygulayan zincirdeki ilk Görünüm Denetleyicisi Gezinti Denetleyicisi'dir, bu nedenle yeni görünümün üst öğesi olarak kullanılır.
  2. Bunun yerine bir ShowDetailViewController yöntem çağrıldıysa, Bunu uygulayan ilk Görünüm Denetleyicisi Bölünmüş Görünüm Denetleyicisi olduğundan üst öğe olarak kullanılır.

yöntemi, GetTargetForAction belirli bir Eylem uygulayan bir Görünüm Denetleyicisi bularak ve ardından bu Görünüm Denetleyicisi'ne bu eylemi almak isteyip istemediğini sorarak çalışır. Bu yöntem genel olduğundan, geliştiriciler yerleşik ve ShowDetailViewController yöntemleri gibi ShowViewController işlev gösteren kendi özel yöntemlerini oluşturabilir.

Uyarlamalı Sunu

iOS 8'de Apple, Popover Presentations'ı ( UIPopoverPresentationController) da uyarlamalı hale getirmiştir. Bu nedenle, Bir Popover Sunu Görünümü Denetleyicisi normal bir Popover Görünümünü Normal Boyut Sınıfında otomatik olarak sunar, ancak yatay olarak kompakt bir Boyut Sınıfında (i Telefon gibi) tam ekran olarak görüntüler.

Birleşik görsel taslak sistemindeki değişikliklere uyum sağlamak için, sunulan Görünüm Denetleyicilerini yönetmek için yeni bir denetleyici nesnesi oluşturulmuştur— UIPresentationController. Bu denetleyici, Görünüm Denetleyicisi'nin sunulduğu zamandan kapatılana kadar oluşturulur. Bir yönetim sınıfı olduğundan, Görünüm Denetleyicisi'ni etkileyen cihaz değişikliklerine (yönlendirme gibi) yanıt verdiği ve ardından Görünüm Denetleyicisi'ne Sunu Denetleyicisi denetimlerine geri beslenen bir süper sınıf olarak kabul edilebilir.

Geliştirici yöntemini kullanarak bir Görünüm Denetleyicisi sunduğunda PresentViewController , sunu işleminin yönetimi öğesine UIKitdevredilir. UIKit, oluşturulan stil için doğru denetleyiciyi (diğer şeylerin yanında) işler ve tek istisna, Görünüm Denetleyicisi'nin stili olarak UIModalPresentationCustomayarlanmış olmasıdır. Burada uygulama, denetleyiciyi kullanmak yerine kendi PresentationController'ını UIKit sağlayabilir.

Özel Sunu Stilleri

Özel bir sunu stiliyle, geliştiriciler özel bir Sunu Denetleyicisi kullanma seçeneğine sahiptir. Bu özel denetleyici, müttefik olduğu Görünümün görünümünü ve davranışını değiştirmek için kullanılabilir.

Boyut Sınıfları ile Çalışma

Bu makaleye dahil edilen Uyarlamalı Fotoğraflar Xamarin Projesi, iOS 8 Birleşik Arabirim uygulamasında Boyut Sınıflarını ve Uyarlamalı Görünüm Denetleyicilerini kullanmanın çalışma örneğini verir.

Uygulama kullanıcı arabirimini tamamen koddan oluştururken, Xcode'un Arabirim Oluşturucusu'nu kullanarak Birleşik Görsel Taslak oluşturmanın aksine, aynı teknikler geçerlidir.

Şimdi Uyarlamalı Fotoğraflar projesinin Uyarlamalı Uygulama oluşturmak için iOS 8'deki Boyut Sınıfı özelliklerinden birkaçını nasıl uyguladığına daha yakından bakalım.

Özellik Ortamı Değişikliklerine Uyum Sağlama

Uyarlamalı Fotoğraflar uygulamasını i Telefon üzerinde çalıştırırken, kullanıcı cihazı dikeyden yataya döndürdüğünde Bölünmüş Görünüm Denetleyicisi hem ana hem de ayrıntılar görünümünü görüntüler:

Bölünmüş Görünüm Denetleyicisi burada görüldüğü gibi hem ana görünümü hem de ayrıntılar görünümünü görüntüler

Bu, Görünüm Denetleyicisi'nin yöntemini geçersiz kılarak UpdateConstraintsForTraitCollection ve kısıtlamaları değerini VerticalSizeClasstemel alarak ayarlayarak gerçekleştirilir. Örneğin:

public void UpdateConstraintsForTraitCollection (UITraitCollection collection)
{
    var views = NSDictionary.FromObjectsAndKeys (
        new object[] { TopLayoutGuide, ImageView, NameLabel, ConversationsLabel, PhotosLabel },
        new object[] { "topLayoutGuide", "imageView", "nameLabel", "conversationsLabel", "photosLabel" }
    );

    var newConstraints = new List<NSLayoutConstraint> ();
    if (collection.VerticalSizeClass == UIUserInterfaceSizeClass.Compact) {
        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("|[imageView]-[nameLabel]-|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("[imageView]-[conversationsLabel]-|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("[imageView]-[photosLabel]-|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("V:|[topLayoutGuide]-[nameLabel]-[conversationsLabel]-[photosLabel]",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("V:|[topLayoutGuide][imageView]|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.Add (NSLayoutConstraint.Create (ImageView, NSLayoutAttribute.Width, NSLayoutRelation.Equal,
            View, NSLayoutAttribute.Width, 0.5f, 0.0f));
    } else {
        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("|[imageView]|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("|-[nameLabel]-|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("|-[conversationsLabel]-|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("|-[photosLabel]-|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("V:[topLayoutGuide]-[nameLabel]-[conversationsLabel]-[photosLabel]-20-[imageView]|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));
    }

    if (constraints != null)
        View.RemoveConstraints (constraints.ToArray ());

    constraints = newConstraints;
    View.AddConstraints (constraints.ToArray ());
}

Geçiş Animasyonları Ekleme

Uyarlamalı Fotoğraflar uygulamasındaki Bölünmüş Görünüm Denetleyicisi daraltılmıştan genişletilmişe geçtiğinde, görünüm denetleyicisinin yöntemi geçersiz kılınarak WillTransitionToTraitCollection animasyonlar varsayılan animasyonlara eklenir. Örneğin:

public override void WillTransitionToTraitCollection (UITraitCollection traitCollection, IUIViewControllerTransitionCoordinator coordinator)
{
    base.WillTransitionToTraitCollection (traitCollection, coordinator);
    coordinator.AnimateAlongsideTransition ((UIViewControllerTransitionCoordinatorContext) => {
        UpdateConstraintsForTraitCollection (traitCollection);
        View.SetNeedsLayout ();
    }, (UIViewControllerTransitionCoordinatorContext) => {
    });
}

Özellik Ortamını Geçersiz Kılma

Yukarıda gösterildiği gibi Uyarlamalı Fotoğraflar uygulaması, i Telefon cihazı yatay görünümde olduğunda Bölünmüş Görünüm Denetleyicisi'ni hem ayrıntıları hem de ana görünümleri görüntülemeye zorlar.

Bu, Görünüm Denetleyicisi'nde aşağıdaki kod kullanılarak gerçekleştirilir:

private UITraitCollection forcedTraitCollection = new UITraitCollection ();
...

public UITraitCollection ForcedTraitCollection {
    get {
        return forcedTraitCollection;
    }

    set {
        if (value != forcedTraitCollection) {
            forcedTraitCollection = value;
            UpdateForcedTraitCollection ();
        }
    }
}
...

public override void ViewWillTransitionToSize (SizeF toSize, IUIViewControllerTransitionCoordinator coordinator)
{
    ForcedTraitCollection = toSize.Width > 320.0f ?
         UITraitCollection.FromHorizontalSizeClass (UIUserInterfaceSizeClass.Regular) :
         new UITraitCollection ();

    base.ViewWillTransitionToSize (toSize, coordinator);
}

public void UpdateForcedTraitCollection ()
{
    SetOverrideTraitCollection (forcedTraitCollection, viewController);
}

Bölünmüş Görünüm Denetleyicisini Genişletme ve Daraltma

Şimdi Bölünmüş Görünüm Denetleyicisi'nin genişletme ve daraltma davranışının Xamarin'de nasıl uygulandığını inceleyelim. AppDelegateiçinde Bölünmüş Görünüm Denetleyicisi oluşturulduğunda, bu değişiklikleri işlemek için temsilcisi atanır:

public class SplitViewControllerDelegate : UISplitViewControllerDelegate
{
    public override bool CollapseSecondViewController (UISplitViewController splitViewController,
        UIViewController secondaryViewController, UIViewController primaryViewController)
    {
        AAPLPhoto photo = ((CustomViewController)secondaryViewController).Aapl_containedPhoto (null);
        if (photo == null) {
            return true;
        }

        if (primaryViewController.GetType () == typeof(CustomNavigationController)) {
            var viewControllers = new List<UIViewController> ();
            foreach (var controller in ((UINavigationController)primaryViewController).ViewControllers) {
                var type = controller.GetType ();
                MethodInfo method = type.GetMethod ("Aapl_containsPhoto");

                if ((bool)method.Invoke (controller, new object[] { null })) {
                    viewControllers.Add (controller);
                }
            }

            ((UINavigationController)primaryViewController).ViewControllers = viewControllers.ToArray<UIViewController> ();
        }

        return false;
    }

    public override UIViewController SeparateSecondaryViewController (UISplitViewController splitViewController,
        UIViewController primaryViewController)
    {
        if (primaryViewController.GetType () == typeof(CustomNavigationController)) {
            foreach (var controller in ((CustomNavigationController)primaryViewController).ViewControllers) {
                var type = controller.GetType ();
                MethodInfo method = type.GetMethod ("Aapl_containedPhoto");

                if (method.Invoke (controller, new object[] { null }) != null) {
                    return null;
                }
            }
        }

        return new AAPLEmptyViewController ();
    }
}

Yöntem, SeparateSecondaryViewController bir fotoğrafın görüntülenip görüntülenmediğini test eder ve bu duruma göre işlem uygular. Hiçbir fotoğraf gösterilmiyorsa, İkincil Görünüm Denetleyicisi'ni daraltarak Ana Görünüm Denetleyicisi'nin görüntülenmesini sağlar.

Bu CollapseSecondViewController yöntem, yığında herhangi bir fotoğraf olup olmadığını görmek için Bölünmüş Görünüm Denetleyicisi genişletilirken kullanılır ve bu durumda bu görünüme geri daraltılır.

Görünüm Denetleyicileri Arasında Geçiş

Şimdi Uyarlamalı Fotoğraflar uygulamasının görünüm denetleyicileri arasında nasıl hareket etmesine göz atalım. AAPLConversationViewController sınıfında, kullanıcı tablodan bir hücre seçtiğindeShowDetailViewController, ayrıntılar görünümünü görüntülemek için yöntemi çağrılır:

public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
    var photo = PhotoForIndexPath (indexPath);
    var controller = new AAPLPhotoViewController ();
    controller.Photo = photo;

    int photoNumber = indexPath.Row + 1;
    int photoCount = (int)Conversation.Photos.Count;
    controller.Title = string.Format ("{0} of {1}", photoNumber, photoCount);
    ShowDetailViewController (controller, this);
}

Açıklama Göstergelerini Görüntüleme

Uyarlamalı Fotoğraf uygulamasında, Özellik Ortamındaki değişikliklere göre Açıklama Göstergelerinin gizlendiği veya gösterildiği birkaç yer vardır. Bu, aşağıdaki kodla işlenir:

public bool Aapl_willShowingViewControllerPushWithSender ()
{
    var selector = new Selector ("Aapl_willShowingViewControllerPushWithSender");
    var target = this.GetTargetViewControllerForAction (selector, this);

    if (target != null) {
        var type = target.GetType ();
        MethodInfo method = type.GetMethod ("Aapl_willShowingDetailViewControllerPushWithSender");
        return (bool)method.Invoke (target, new object[] { });
    } else {
        return false;
    }
}

public bool Aapl_willShowingDetailViewControllerPushWithSender ()
{
    var selector = new Selector ("Aapl_willShowingDetailViewControllerPushWithSender");
    var target = this.GetTargetViewControllerForAction (selector, this);

    if (target != null) {
        var type = target.GetType ();
        MethodInfo method = type.GetMethod ("Aapl_willShowingDetailViewControllerPushWithSender");
        return (bool)method.Invoke (target, new object[] { });
    } else {
        return false;
    }
}

Bunlar, yukarıda ayrıntılı olarak açıklanan yöntem kullanılarak GetTargetViewControllerForAction uygulanır.

Tablo Görünümü Denetleyicisi verileri görüntülerken, bir gönderimin gerçekleşip gerçekleşmeyeceğini ve Açıklama Göstergesinin uygun şekilde görüntülenip görüntülenmeyeceğini veya gizlenmeyeceğini görmek için yukarıda uygulanan yöntemleri kullanır:

public override void WillDisplay (UITableView tableView, UITableViewCell cell, NSIndexPath indexPath)
{
    bool pushes = ShouldShowConversationViewForIndexPath (indexPath) ?
         Aapl_willShowingViewControllerPushWithSender () :
         Aapl_willShowingDetailViewControllerPushWithSender ();

    cell.Accessory = pushes ? UITableViewCellAccessory.DisclosureIndicator : UITableViewCellAccessory.None;
    var conversation = ConversationForIndexPath (indexPath);
    cell.TextLabel.Text = conversation.Name;
}

Yeni ShowDetailTargetDidChangeNotification Tür

Apple, Bölünmüş Görünüm Denetleyicisi ShowDetailTargetDidChangeNotificationiçinden Boyut Sınıfları ve Özellik Ortamları ile çalışmak için yeni bir bildirim türü ekledi. Bölünmüş Görünüm Denetleyicisi için hedef Ayrıntı Görünümü değiştiğinde (örneğin, denetleyici genişletildiğinde veya daraltıldığında) bu bildirim gönderilir.

Uyarlamalı Fotoğraflar uygulaması, Ayrıntı Görünümü Denetleyicisi değiştiğinde Açıklama Göstergesinin durumunu güncelleştirmek için bu bildirimi kullanır:

public override void ViewDidLoad ()
{
    base.ViewDidLoad ();
    TableView.RegisterClassForCellReuse (typeof(UITableViewCell), AAPLListTableViewControllerCellIdentifier);
    NSNotificationCenter.DefaultCenter.AddObserver (this, new Selector ("showDetailTargetDidChange:"),
        UIViewController.ShowDetailTargetDidChangeNotification, null);
    ClearsSelectionOnViewWillAppear = false;
}

Xamarin.iOS'ta Kolayca Birleşik Uygulama oluşturmak için Boyut Sınıfları, Özellik Koleksiyonları ve Uyarlamalı Görünüm Denetleyicilerinin kullanılabilmesinin tüm yollarını görmek için Uyarlamalı Fotoğraflar uygulamasına daha yakından bakın.

Birleşik Görsel Taslaklar

iOS 8'de yeni eklenen Birleşik Görsel Taslaklar, geliştiricinin birden çok Boyut Sınıfını hedefleyerek hem i Telefon hem de iPad cihazlarında görüntülenebilen tek bir birleşik görsel taslak dosyası oluşturmasına olanak tanır. Geliştirici, Birleşik Görsel Taslakları kullanarak daha az kullanıcı arabirimine özgü kod yazar ve oluşturmak ve korumak için yalnızca bir arabirim tasarımına sahiptir.

Birleşik Görsel Taslaklarının başlıca avantajları şunlardır:

  • i Telefon ve iPad için aynı görsel taslak dosyasını kullanın.
  • iOS 6 ve iOS 7'ye geriye doğru dağıtın.
  • Farklı cihazlar, yönlendirmeler ve işletim sistemi sürümleri için düzenin önizlemesini görüntüleme.

Boyut Sınıflarını Etkinleştirme

Varsayılan olarak, tüm yeni Xamarin.iOS projeleri boyut sınıflarını kullanır. Eski bir projedeki görsel taslak içinde Boyut Sınıflarını ve Uyarlamalı Segue'leri kullanmak için, önce Xcode 6 Birleşik Görsel Taslak biçimine dönüştürülmelidir ve görsel taslaklarınız için Xcode Dosya Denetçisi'nin içinde Boyut Sınıflarını Kullan onay kutusu seçilidir.

Dinamik Başlatma Ekranları

Başlatma ekranı dosyası, kullanıcıya uygulamanın gerçekten başlatıldığına ilişkin geri bildirim sağlamak için bir iOS uygulaması başlatılırken giriş ekranı olarak görüntülenir. iOS 8'in öncesinde, geliştiricinin her cihaz türü, yönlendirmesi ve uygulamanın üzerinde çalıştıracağı ekran çözünürlüğü için birden çok Default.png görüntü varlığı içermesi gerekirdi. Örneğin, Default@2x.png, Default-Landscape@2x~ipad.png, Default-Portrait@2x~ipad.pngvb.

Yeni i Telefon 6 ve i Telefon 6 Plus cihazları (ve yaklaşan Apple Watch) tüm mevcut i Telefon ve iPad cihazlarıyla dikkate alan bu, oluşturulması ve korunması gereken başlangıç ekranı görüntü varlıklarının çeşitli boyut, yönlendirme ve çözünürlüklerinden oluşan Default.png geniş bir diziyi temsil eder. Buna ek olarak, bu dosyalar oldukça büyük olabilir ve teslim edilebilir uygulama paketini "şişirir", uygulamayı iTunes App Store'dan indirmek için gereken süreyi artırır (muhtemelen hücresel ağ üzerinden teslim edilebilmesini engeller) ve son kullanıcının cihazında gereken depolama miktarını artırır.

iOS 8'de yeni olan geliştirici, Xcode'da Otomatik Düzen ve Boyut Sınıflarını kullanarak her cihaz, çözünürlük ve yönlendirme için çalışacak bir Dinamik Başlatma Ekranı oluşturan tek bir atomik .xib dosya oluşturabilir. Bu, geliştiricinin gerekli tüm görüntü varlıklarını oluşturup bakımını yapmak için gereken çalışma miktarını azaltmakla kalmaz, aynı zamanda uygulamanın yüklü paketinin boyutunu da büyük ölçüde azaltır.

Dinamik Başlatma Ekranları aşağıdaki sınırlamalara ve dikkat edilmesi gereken noktalara sahiptir:

  • Yalnızca UIKit sınıfları kullanın.
  • veya UIViewController nesnesi olan tek bir UIView kök görünüm kullanın.
  • Uygulamanın koduna bağlantı yapmayın (Eylemler veya Çıkışlar eklemeyin).
  • Nesne eklemeyin UIWebView .
  • Özel sınıf kullanmayın.
  • Çalışma zamanı özniteliklerini kullanmayın.

Yukarıdaki yönergeleri göz önünde bulundurarak mevcut bir Xamarin iOS 8 projesine Dinamik Başlatma Ekranı eklemeye göz atalım.

Aşağıdakileri yapın:

  1. Mac için Visual Studio açın ve Dinamik Başlatma Ekranı'nı eklemek için Çözümü yükleyin.

  2. Çözüm Gezgini dosyaya MainStoryboard.storyboard sağ tıklayın ve Xcode Arabirim Oluşturucusu ile>Aç'ı seçin:

    Xcode Arabirim Oluşturucusu ile Aç

  3. Xcode'da Dosya Yeni>Dosya>... seçeneğini belirleyin:

    Dosya / Yeni'yi seçin

  4. iOS>Kullanıcı Arabirimi>Başlatma Ekranı'nıseçin ve İleri düğmesine tıklayın:

    iOS / Kullanıcı Arabirimi / Başlatma Ekranı'nı seçin

  5. Dosyayı LaunchScreen.xib adlandırın ve Oluştur düğmesine tıklayın:

    Dosyayı LaunchScreen.xib olarak adlandırın

  6. Grafik öğeleri ekleyerek ve bunları belirli cihazlar, yönlendirmeler ve ekran boyutları için konumlandırmak için Düzen Kısıtlamaları'nı kullanarak başlatma ekranının tasarımını düzenleyin:

    Başlatma ekranının tasarımını düzenleme

  7. değişiklikleri olarak LaunchScreen.xibkaydedin.

  8. Uygulamalar Hedefi'nive Genel sekmesini seçin:

    Uygulamalar Hedefi'ni ve Genel sekmesini seçin

  9. Info.plist Seç düğmesine tıklayın, Xamarin uygulaması için öğesini seçin Info.plist ve Seç düğmesine tıklayın:

    Xamarin uygulaması için Info.plist dosyasını seçin

  10. Uygulama Simgeleri ve Görüntüleri Başlat bölümünde Ekran Dosyasını Başlat açılan listesini açın ve yukarıda oluşturulanı LaunchScreen.xib seçin:

    LaunchScreen.xib dosyasını seçin

  11. Dosyadaki değişiklikleri kaydedin ve Mac için Visual Studio dönün.

  12. Mac için Visual Studio Xcode ile değişiklikleri eşitlemeyi tamamlanmasını bekleyin.

  13. Çözüm Gezgini Kaynak klasörüne sağ tıklayın ve Dosya Ekle...'yi>seçin:

    Ekle / Dosya Ekle... öğesini seçin.

  14. LaunchScreen.xib Yukarıda oluşturulan dosyayı seçin ve Aç düğmesine tıklayın:

    LaunchScreen.xib dosyasını seçin

  15. Uygulamayı oluşturun.

Dinamik Başlatma Ekranını Test Etme

Mac için Visual Studio'da i Telefon 4 Retina simülatörünü seçin ve uygulamayı çalıştırın. Dinamik Başlatma Ekranı doğru biçimde ve yönde görüntülenir:

Dikey yönde görüntülenen Dinamik Başlatma Ekranı

uygulamayı Mac için Visual Studio'da durdurun ve bir iPad iOS 8 cihazı seçin. Uygulamayı çalıştırdığınızda başlatma ekranı bu cihaz ve yönlendirme için doğru biçimlendirilir:

Yatay yönde görüntülenen Dinamik Başlatma Ekranı

Mac için Visual Studio dönün ve uygulamanın çalışmasını durdurun.

iOS 7 ile çalışma

iOS 7 ile geriye dönük uyumluluğu korumak için, iOS 8 uygulamasında normal Default.png görüntü varlıklarını normal şekilde dahil edin. iOS, bir iOS 7 cihazında çalışırken önceki davranışa döner ve bu dosyaları başlangıç ekranı olarak kullanır.

Özet

Bu makale, Boyut Sınıfları'na ve i Telefon ve iPad cihazlarında düzeni nasıl etkilediklerine hızlı bir bakış attı. Birleştirilmiş Arabirimler oluşturmak için Özellik, Özellik Ortamları ve Özellik Koleksiyonlarının Boyut Sınıfları ile nasıl çalıştığı anlatıldı. Uyarlamalı Görünüm Denetleyicilerine ve Birleşik Arabirimlerin içindeki Boyut Sınıfları ile nasıl çalıştıklarına kısaca göz attı. Xamarin iOS 8 uygulamasının içindeki C# kodundan Boyut Sınıflarını ve Birleşik Arabirimleri uygulamayı inceledi.

Son olarak, bu makalede her iOS 8 cihazında başlangıç ekranı olarak görüntülenecek tek bir Dinamik Başlatma Ekranı oluşturmayla ilgili temel bilgiler ele alınmıştır.