Введение в iOS 7

В этой статье рассматриваются основные новые API, представленные в iOS 7, включая переходы контроллера представления, усовершенствования анимаций UIView, UIKit Dynamics и Text Kit. Он также охватывает некоторые изменения пользовательского интерфейса и новые возможности многозадачности.

IOS 7 — это основное обновление до iOS. В нем представлен совершенно новый дизайн пользовательского интерфейса, который ставит фокус на содержимое, а не на хром приложения. Наряду с визуальными изменениями iOS 7 добавляет множество новых API для создания более широких взаимодействий и возможностей. В этом документе описаны новые технологии, представленные с iOS 7, и они служат отправной точкой для дальнейшего изучения.

Улучшения анимации UIView

IOS 7 расширяет поддержку анимации в UIKit, позволяя приложениям выполнять действия, которые ранее требовались непосредственно в платформу основной анимации. Например, UIView теперь можно выполнять весенние анимации, а также анимации ключевых кадров, которые ранее применялись к объекту CAKeyframeAnimationCALayer.

Spring Animations

UIView теперь поддерживает анимацию изменений свойств с помощью эффекта spring. Чтобы добавить это, вызовите метод AnimateNotify или AnimateNotifyAsync метод, передавая значения для коэффициента демортизации весной и начальной скорости весны, как описано ниже:

  • springWithDampingRatio — значение от 0 до 1, где колебания увеличиваются для меньшего значения.
  • initialSpringVelocity — начальная скорость весной в процентах от общего расстояния анимации в секунду.

Следующий код создает эффект spring при изменении центра представления изображения:

void AnimateWithSpring ()
{
    float springDampingRatio = 0.25f;
    float initialSpringVelocity = 1.0f;

    UIView.AnimateNotify (3.0, 0.0, springDampingRatio, initialSpringVelocity, 0, () => {

        imageView.Center = new CGPoint (imageView.Center.X, 400);

    }, null);
}

Этот весенний эффект приводит к отскоку представления изображения, так как он завершает анимацию в новом центре расположения, как показано ниже:

Этот весенний эффект приводит к отскоку представления изображения, так как он завершает анимацию в новом центре расположения

Анимации ключевых кадров

Теперь класс UIView включает AnimateWithKeyframes метод для создания анимаций ключевых кадров на объекте UIView. Этот метод похож на другие UIView методы анимации, за исключением того, что дополнительный NSAction передается в качестве параметра для включения ключевых кадров. NSActionВ пределах ключевых кадров добавляются вызовомUIView.AddKeyframeWithRelativeStartTime.

Например, следующий фрагмент кода создает анимацию ключевого кадра для анимации центра представления, а также для поворота представления:

void AnimateViewWithKeyframes ()
{
    var initialTransform = imageView.Transform;
    var initialCeneter = imageView.Center;

    // can now use keyframes directly on UIView without needing to drop directly into Core Animation

    UIView.AnimateKeyframes (2.0, 0, UIViewKeyframeAnimationOptions.Autoreverse, () => {
        UIView.AddKeyframeWithRelativeStartTime (0.0, 0.5, () => {
            imageView.Center = new CGPoint (200, 200);
        });

        UIView.AddKeyframeWithRelativeStartTime (0.5, 0.5, () => {
            imageView.Transform = CGAffineTransform.MakeRotation ((float)Math.PI / 2);
        });
    }, (finished) => {
        imageView.Center = initialCeneter;
        imageView.Transform = initialTransform;

        AnimateWithSpring ();
    });
}

Первые два параметра метода AddKeyframeWithRelativeStartTime указывают время начала и длительность ключевого кадра соответственно в процентах от общей длины анимации. Приведенный выше пример приводит к анимации представления изображения на новый центр в течение первой секунды, за которым следует поворот 90 градусов в течение следующей секунды. Так как анимация указывает UIViewKeyframeAnimationOptions.Autoreverse в качестве параметра, оба ключевых кадра анимироваться в обратном направлении, а также. Наконец, конечные значения задаются в начальном состоянии обработчика завершения.

На снимках экрана ниже показана объединенная анимация с помощью ключевых кадров:

На этом снимках экрана показана объединенная анимация с помощью ключевых кадров

UIKit Dynamics

UIKit Dynamics — это новый набор API в UIKit, позволяющий приложениям создавать анимированные взаимодействия на основе физики. UIKit Dynamics инкапсулирует модуль 2D физики, чтобы сделать это возможным.

API является декларативным в природе. Вы объявляете, как ведет себя взаимодействие физики путем создания объектов , называемых поведением , для выражения понятий физики, таких как гравитация, столкновения, весной и т. д. Затем вы присоединяете поведение к другому объекту, называемому динамическим аниматором, который инкапсулирует представление. Динамический аниматор заботится о применении объявленного поведения физики к динамическим элементам - элементам , реализующим IUIDynamicItemтакие как UIView.

Существует несколько различных примитивных действий, доступных для активации сложных взаимодействий, в том числе:

  • UIAttachmentBehavior — присоединяет два динамических элемента, которые перемещаются вместе или присоединяет динамический элемент к точке вложения.
  • UICollisionBehavior — позволяет динамическим элементам участвовать в столкновениях.
  • UIDynamicItemBehavior — задает общий набор свойств для применения к динамическим элементам, таким как эластичность, плотность и трение.
  • UIGravityBehavior - Применяет гравитацию к динамическому элементу, что приводит к ускорению в гравитационном направлении.
  • UIPushBehavior — применяет принудительное применение к динамическому элементу.
  • UISnapBehavior — позволяет динамическому элементу привязаться к позиции с эффектом spring.

Хотя существует множество примитивов, общий процесс добавления взаимодействия на основе физики в представление с помощью UIKit Dynamics согласован между поведением:

  1. Создайте динамический аниматор.
  2. Создание поведения.
  3. Добавьте поведение в динамический аниматор.

Пример Dynamics

Рассмотрим пример, который добавляет гравитацию и границу столкновения к объекту UIView.

UIGravityBehavior

Добавление гравитации в представление изображения следует 3 шагам, описанным выше.

Мы будем работать в ViewDidLoad этом примере. Сначала добавьте UIImageView экземпляр следующим образом:

image = UIImage.FromFile ("monkeys.jpg");

imageView = new UIImageView (new CGRect (new CGPoint (View.Center.X - image.Size.Width / 2, 0), image.Size)) {
                    Image =  image
                }

View.AddSubview (imageView);

При этом создается представление изображения, по центру в верхней части экрана. Чтобы сделать изображение "падение" с гравитацией, создайте экземпляр UIDynamicAnimator:

dynAnimator = new UIDynamicAnimator (this.View);

Принимает UIDynamicAnimator экземпляр ссылки UIView или ссылки UICollectionViewLayout, которая содержит элементы, которые будут анимированы для присоединенного поведения.

Затем создайте UIGravityBehavior экземпляр. Можно передать один или несколько объектов, реализующих IUIDynamicItemтакие объекты, как UIView:

var gravity = new UIGravityBehavior (dynItems);

Поведение передается массивом IUIDynamicItem, который в данном случае содержит один UIImageView экземпляр, который мы анимируем.

Наконец, добавьте поведение в динамический аниматор:

dynAnimator.AddBehavior (gravity);

Это приводит к анимации изображения вниз с гравитацией, как показано ниже:

Расположение начального образаРасположение конечного изображения

Так как границы экрана не ограничиваются, представление изображения просто падает снизу. Чтобы ограничить представление, чтобы изображение столкнулось с краями экрана, можно добавить UICollisionBehavior. Мы рассмотрим эту статью в следующем разделе.

UICollisionBehavior

Начнем с создания UICollisionBehavior и добавления его в динамический аниматор, как и для этого UIGravityBehavior.

Измените код, чтобы включить следующий UICollisionBehaviorкод:

using (image = UIImage.FromFile ("monkeys.jpg")) {

    imageView = new UIImageView (new CGRect (new CGPoint (View.Center.X - image.Size.Width / 2, 0), image.Size)) {
        Image =  image
    };

    View.AddSubview (imageView);

    // 1. create the dynamic animator
    dynAnimator = new UIDynamicAnimator (this.View);

    // 2. create behavior(s)
    var gravity = new UIGravityBehavior (imageView);
    var collision = new UICollisionBehavior (imageView) {
        TranslatesReferenceBoundsIntoBoundary = true
    };

    // 3. add behaviors(s) to the dynamic animator
    dynAnimator.AddBehaviors (gravity, collision);
}

Имеет UICollisionBehavior свойство с именем TranslatesReferenceBoundsIntoBoundry. Если задать это значение, это приведет к тому, что true границы ссылочного представления будут использоваться в качестве границы столкновения.

Теперь, когда изображение анимирует вниз с гравитацией, он отскочил немного от нижней части экрана, прежде чем поселиться, чтобы отдохнуть там.

UIDynamicItemBehavior

Мы можем дополнительно контролировать поведение падающего представления изображения с помощью дополнительных действий. Например, можно добавить UIDynamicItemBehavior значение для повышения эластичности, что приводит к отскоку представления изображения при столкновении с нижней частью экрана.

UIDynamicItemBehavior Добавление выполняет те же действия, что и другие действия. Сначала создайте поведение:

var dynBehavior = new UIDynamicItemBehavior (dynItems) {
    Elasticity = 0.7f
};

Затем добавьте поведение в динамический аниматор:

dynAnimator.AddBehavior (dynBehavior);

При таком поведении представление изображения отскочило больше, когда оно сталкивается с границей.

Общие изменения пользовательского интерфейса

Помимо новых API UIKit, таких как UIKit Dynamics, переходы контроллеров и расширенные анимации UIView, описанные выше, iOS 7 представляет различные визуальные изменения пользовательского интерфейса и связанные изменения API для различных представлений и элементов управления. Дополнительные сведения см. в обзоре пользовательского интерфейса iOS 7.

Текстовый комплект

Набор текста — это новый API, который предлагает мощные функции макета текста и отрисовки. Он построен на основе низкоуровневой базовой текстовой платформы, но гораздо проще использовать, чем основной текст.

Дополнительные сведения см. в разделе TextKit

Multitasking

IOS 7 изменяется при выполнении фоновой работы. Завершение задач в iOS 7 больше не позволяет приложениям проснуться, когда задачи выполняются в фоновом режиме, а приложения проснуты для фоновой обработки в режиме, отличном от непрерывной. iOS 7 также добавляет три новых API для обновления приложений с новым содержимым в фоновом режиме:

  • Фоновая выборка — позволяет приложениям обновлять содержимое в фоновом режиме через регулярные интервалы.
  • Удаленные уведомления— позволяет приложениям обновлять содержимое при получении push-уведомления. Уведомления могут быть автоматически или отображать баннер на экране блокировки.
  • Фоновая служба передачи — позволяет отправлять и загружать данные, такие как большие файлы, без фиксированного ограничения времени.

Дополнительные сведения о новых возможностях многозадачности см. в разделах iOS руководства по фоновой работе Xamarin.

Итоги

В этой статье рассматриваются несколько основных новых дополнений к iOS. Во-первых, показано, как добавить пользовательские переходы в контроллеры просмотра. Затем показано, как использовать переходы в представлениях коллекции, как из контроллера навигации, так и интерактивно между представлениями коллекции. Далее в ней представлено несколько улучшений, внесенных в анимацию UIView, показывающая, как приложения используют UIKit для вещей, которые ранее требовали программирования непосредственно для основной анимации. Наконец, новый API UIKit Dynamics, который приносит подсистему физики в UIKit, представлен вместе с поддержкой форматированного текста, которая теперь доступна в платформе набора текста.