Introducción a iOS 6

iOS 6 incluye una variedad de nuevas tecnologías para desarrollar aplicaciones, que Xamarin.iOS 6 lleva a los desarrolladores de C#.

The iOS 6 logo

Con iOS 6 y Xamarin.iOS 6, los desarrolladores ahora tienen una gran capacidad a su disposición para crear aplicaciones iOS, incluidas las que tienen como destino iPhone 5. En este documento se enumeran algunas de las nuevas características más interesantes que están disponibles y los vínculos a artículos de cada tema. Además, toca un par de cambios que serán importantes a medida que los desarrolladores se mueven a iOS 6 y la nueva resolución de iPhone 5.

Introducción a las vistas de colección

Las vistas de colección permiten mostrar contenido mediante diseños arbitrarios. Permiten crear fácilmente diseños similares a la cuadrícula de fábrica, a la vez que admiten diseños personalizados. Para obtener más información, consulte la guía Introducción a las vistas de colección.

Introduction to PassKit (Introducción a PassKit)

El marco PassKit permite que las aplicaciones interactúen con pases digitales administrados en la aplicación Passbook. Para obtener más información, consulte la guía Introduction to Pass Kit.

Introducción a EventKit

El marco EventKit proporciona una manera de acceder a los datos calendarios, eventos de calendario y recordatorios que almacena la base de datos de calendario. El acceso a los calendarios y eventos de calendario ha estado disponible desde iOS 4, pero iOS 6 ahora expone el acceso a los datos de recordatorios. Para más información, consulte la guía Introducción a EventKit.

Introducción al marco social

Social Framework proporciona una API unificada para interactuar con las redes sociales, como Twitter y Facebook, así como SinaWeibo para los usuarios de China. Para obtener más información, consulte la guía Introducción al marco social.

Cambios en StoreKit

Apple ha introducido dos nuevas características en el kit de la tienda: comprar y descargar contenido de iTunes o App Store desde dentro de la aplicación, y hospedar los archivos de contenido para las compras desde la aplicación. Para obtener más información, consulte la guía Cambios en el kit de la tienda.

Otros cambios

ViewWillUnload y ViewDidUnload en desuso

Los métodos ViewWillUnload y ViewDidUnload de UIViewController ya no se llaman en iOS 6. En versiones anteriores de iOS, las aplicaciones pueden haber usado estos métodos para guardar el estado antes de descargar una vista y limpiar el código, respectivamente.

Por ejemplo, Visual Studio para Mac crearía un método denominado ReleaseDesignerOutlets, que se muestra a continuación, al que se llamaría desde ViewDidUnload:

void ReleaseDesignerOutlets ()
{
    if (myOutlet != null) {
        myOutlet.Dispose ();
        myOutlet = null;
    }
}

Sin embargo, en iOS 6, ya no es necesario llamar a ReleaseDesignerOutlets.

Para el código de limpieza, las aplicaciones de iOS 6 deben usar DidReceiveMemoryWarning. Sin embargo, el código que llama Dispose debe usarse con moderación y solo para objetos que consumen mucha memoria, como se muestra a continuación:

if (myImageView != null){
    if (myImageView.Superview == null){
        myImageView.Dispose();
        myImageView = null;
    }
}

De nuevo, llamar Dispose como antes rara vez debe ser necesario. En general, la mayoría de las aplicaciones deben hacer es quitar controladores de eventos.

En el caso de guardar el estado, las aplicaciones pueden realizar esto en ViewWillDisappear y ViewDidDisappear en lugar de ViewWillUnload.

Resolución de iPhone 5

Los dispositivos iPhone 5 tienen una resolución de 640x1136. Las aplicaciones destinadas a versiones anteriores de iOS aparecerán en la bandeja de letras cuando se ejecuten en un iPhone 5, como se muestra a continuación:

Applications that targeted previous versions of iOS will appear letterboxed when run on an iPhone 5

Para que la aplicación aparezca en pantalla completa en iPhone 5, basta con agregar una imagen denominada Default-568h@2x.png tener una resolución de 640x1136. En la captura de pantalla siguiente se muestra la aplicación que se ejecuta después de incluir esta imagen:

This screenshot shows the application running after this image has been included

Subclase UINavigationBar

En iOS 6 UINavigationBar se puede subclasificar. Esto permite un control adicional de la apariencia de UINavigationBar. Por ejemplo, las aplicaciones pueden subclasificar para agregar subvistas, animar esas vistas y modificar los límites del UINavigationBar.

El código siguiente muestra un ejemplo de una subclase UINavigationBar que agrega un UIImageView:

public class CustomNavBar : UINavigationBar
{
​    UIImageView iv;
    public CustomNavBar (IntPtr h) : base(h)
​    {
​​        iv = new UIImageView (UIImage.FromFile ("monkey.png"));
​​        iv.Frame = new CGRect (75, 0, 30, 39);
​    }
    public override void Draw (RectangleF rect)
​    {
​​        base.Draw (rect);
        TintColor = UIColor.Purple;
​​        AddSubview (iv);
​    }
}

Para agregar una subclase UINavigationBar a UINavigationController, use el constructor UINavigationController que toma el tipo de UINavigationBar y UIToolbar, como se muestra a continuación:

navController = new UINavigationController (typeof(CustomNavBar), typeof(UIToolbar));

El uso de esta subclase UINavigationBar da como resultado que la vista de imagen se muestre como se muestra en la captura de pantalla siguiente:

Using this UINavigationBar subclass results in the image view being displayed as shown in this screenshot

Orientación de la interfaz

Antes de las aplicaciones de iOS 6 podían invalidar ShouldAutorotateToInterfaceOrientation, devolviendo true para cualquier orientación que admita el controlador determinado. Por ejemplo, el código siguiente se usaría para admitir solo vertical:

public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation)
    {
        return (toInterfaceOrientation == UIInterfaceOrientation.Portrait);
    }

En iOS 6 ShouldAutorotateToInterfaceOrientation está en desuso. En su lugar, las aplicaciones pueden invalidar GetSupportedInterfaceOrientations en el controlador de vista raíz, como se muestra a continuación:

public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations ()
    {
        return UIInterfaceOrientationMask.Portrait;
    }

En iPad, este valor predeterminado es las cuatro orientaciones si GetSupportedInterfaceOrientation no se implementa. En iPhone y iPod Touch, el valor predeterminado es todas las orientaciones excepto PortraitUpsideDown.