Введение в iOS 6

iOS 6 включает различные новые технологии для разработки приложений, которые Xamarin.iOS 6 приносит разработчикам C#.

The iOS 6 logo

С iOS 6 и Xamarin.iOS 6 разработчики теперь имеют множество возможностей для создания приложений iOS, включая те, которые предназначены для i Телефон 5. В этом документе перечислены некоторые из более интересных новых функций, доступных и ссылок на статьи для каждого раздела. Кроме того, он касается нескольких изменений, которые будут важны, как разработчики переходят на iOS 6 и новое разрешение i Телефон 5.

Общие сведения о представлениях коллекции

Представления коллекции позволяют отображать содержимое с помощью произвольных макетов. Они позволяют легко создавать макеты, такие как сетка из поля, а также поддерживают пользовательские макеты. Дополнительные сведения см. в руководстве по представлению коллекций .

Введение в PassKit

Платформа PassKit позволяет приложениям взаимодействовать с цифровыми проходами, управляемыми в приложении Passbook. Дополнительные сведения см. в руководстве по пакету pass kit.

Общие сведения о EventKit

Платформа EventKit предоставляет способ доступа к данным календарей, событий календаря и напоминаний, которые хранятся в базе данных календаря. Доступ к календарям и событиям календаря доступен с iOS 4, но iOS 6 теперь предоставляет доступ к данным напоминаний. Дополнительные сведения см. в руководстве поI ntroduction to EventKit .

Общие сведения о социальной платформе

Social Framework предоставляет единый API для взаимодействия с социальными сетями, включая Twitter и Facebook, а также SinaWeibo для пользователей в Китае. Дополнительные сведения см. в руководстве по социальной платформе .

Изменения в StoreKit

Apple представила две новые функции в Store Kit: приобретение и скачивание содержимого iTunes или App Store из приложения и размещение файлов содержимого для покупок в приложении!. Дополнительные сведения см. в руководстве по изменению комплекта для магазина.

Другие изменения

ViewWillUnload и ViewDidUnload устарели

Методы ViewWillUnload и ViewDidUnload методы UIViewController больше не вызываются в iOS 6. В предыдущих версиях iOS эти методы могут использоваться приложениями для сохранения состояния перед выгрузкой представления и кодом очистки соответственно.

Например, Visual Studio для Mac создаст метод с именем ReleaseDesignerOutletsниже, который затем будет вызываться изViewDidUnload:

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

Однако в iOS 6 больше не требуется вызывать ReleaseDesignerOutlets.

Для кода очистки следует использовать DidReceiveMemoryWarningприложения iOS 6. Однако код, который вызывает Dispose , следует использовать экономно и только для объектов с интенсивным объемом памяти, как показано ниже:

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

Опять же, вызов Dispose , как описано выше, редко требуется. Как правило, большинство приложений должны выполняться для удаления обработчиков событий.

В случае сохранения состояния приложения могут выполнять это ViewWillDisappear и ViewDidDisappear вместо ViewWillUnloadнего.

i Телефон разрешение 5

i Телефон 5 устройств имеет разрешение 640x1136. Приложения, предназначенные для предыдущих версий iOS, будут отображаться в папке "I Телефон 5", как показано ниже:

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

Чтобы приложение отображалось на полноэкранном экране i Телефон 5, просто добавьте изображение Default-568h@2x.png с разрешением 640x1136. На следующем снимку экрана показана работа приложения после включения этого образа:

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

Подклассирование UINavigationBar

В iOS 6 UINavigationBar можно подклассировать. Это позволяет дополнительно контролировать внешний вид и чувствовать себя UINavigationBar. Например, приложения могут подкласса добавлять подвиды, анимировать эти представления и изменять границы объекта UINavigationBar.

В приведенном ниже коде показан пример подкласса UINavigationBar , который добавляет 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);
​    }
}

Чтобы добавить подкласс UINavigationBar в объект UINavigationController, используйте UINavigationController конструктор, который принимает тип UINavigationBar и UIToolbar, как показано ниже:

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

Использование этого UINavigationBar подкласса приводит к отображению представления изображения, как показано на следующем снимке экрана:

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

Ориентация интерфейса

До приложений iOS 6 можно переопределить ShouldAutorotateToInterfaceOrientation, возвращая значение true для любой ориентации, поддерживаемой определенным контроллером. Например, следующий код будет использоваться для поддержки только портрета:

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

В iOS 6 ShouldAutorotateToInterfaceOrientation не рекомендуется. Вместо этого приложения могут переопределить GetSupportedInterfaceOrientations контроллер корневого представления, как показано ниже:

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

На iPad эта ориентация по умолчанию используется для всех четырех ориентаций, если GetSupportedInterfaceOrientation она не реализована. В i Телефон и iPod Touch по умолчанию все ориентации, кроме PortraitUpsideDown.