Введение в iOS 7
В этой статье рассматриваются основные новые API, представленные в iOS 7, включая переходы контроллера представления, усовершенствования анимаций UIView, UIKit Dynamics и Text Kit. Он также охватывает некоторые изменения пользовательского интерфейса и новые возможности многозадачности.
IOS 7 — это основное обновление до iOS. В нем представлен совершенно новый дизайн пользовательского интерфейса, который ставит фокус на содержимое, а не на хром приложения. Наряду с визуальными изменениями iOS 7 добавляет множество новых API для создания более широких взаимодействий и возможностей. В этом документе описаны новые технологии, представленные с iOS 7, и они служат отправной точкой для дальнейшего изучения.
Улучшения анимации UIView
IOS 7 расширяет поддержку анимации в UIKit, позволяя приложениям выполнять действия, которые ранее требовались непосредственно в платформу основной анимации. Например, UIView
теперь можно выполнять весенние анимации, а также анимации ключевых кадров, которые ранее применялись к объекту CAKeyframeAnimation
CALayer
.
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 согласован между поведением:
- Создайте динамический аниматор.
- Создание поведения.
- Добавьте поведение в динамический аниматор.
Пример 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, представлен вместе с поддержкой форматированного текста, которая теперь доступна в платформе набора текста.