Introduzione a iOS 7
Questo articolo illustra le principali NUOVE API introdotte in iOS 7, tra cui transizioni del controller di visualizzazione, miglioramenti alle animazioni UIView, UIKit Dynamics e Text Kit. Illustra anche alcune delle modifiche apportate all'interfaccia utente e le nuove funzionalità multitasking.
iOS 7 è un aggiornamento principale per iOS. Introduce una progettazione completamente nuova dell'interfaccia utente che pone lo stato attivo sul contenuto anziché sul riquadro delle applicazioni. Oltre alle modifiche visive, iOS 7 aggiunge una pletora di nuove API per creare interazioni ed esperienze più avanzate. Questo documento illustra le nuove tecnologie introdotte con iOS 7 e funge da punto di partenza per un'ulteriore esplorazione.
Miglioramenti dell'animazione UIView
iOS 7 aumenta il supporto dell'animazione in UIKit, consentendo alle applicazioni di eseguire operazioni che in precedenza richiedevano l'eliminazione diretta nel framework di animazione core. Ad esempio, UIView
ora può eseguire animazioni spring e animazioni basate su fotogrammi chiave, che in precedenza un oggetto CAKeyframeAnimation
applicato a un oggetto CALayer
.
Animazioni a molla
UIView
supporta ora l'animazione delle modifiche delle proprietà con un effetto molla. Per aggiungere questa operazione, chiamare il AnimateNotify
metodo o AnimateNotifyAsync
, passando i valori per il rapporto di smorzamento della primavera e la velocità iniziale della molla, come descritto di seguito:
springWithDampingRatio
– Valore compreso tra 0 e 1, in cui l'oscillazione aumenta per un valore minore.initialSpringVelocity
– La velocità iniziale della molla come percentuale della distanza totale di animazione al secondo.
Il codice seguente produce un effetto spring quando cambia il centro della visualizzazione immagine:
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);
}
Questo effetto di primavera fa sì che la visualizzazione immagine venga rimbalzata mentre completa l'animazione in una nuova posizione centrale, come illustrato di seguito:
Animazioni con fotogrammi chiave
La UIView
classe include ora il AnimateWithKeyframes
metodo per la creazione di animazioni basate su fotogrammi chiave in un oggetto UIView
. Questo metodo è simile ad altri UIView
metodi di animazione, ad eccezione del fatto che viene passato come NSAction
parametro per includere i fotogrammi chiave. All'interno di NSAction
, i fotogrammi chiave vengono aggiunti chiamando UIView.AddKeyframeWithRelativeStartTime
.
Ad esempio, il frammento di codice seguente crea un'animazione basata su fotogrammi chiave per animare il centro di una visualizzazione e per ruotare la visualizzazione:
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 ();
});
}
I primi due parametri del AddKeyframeWithRelativeStartTime
metodo specificano rispettivamente l'ora di inizio e la durata del fotogramma chiave come percentuale della lunghezza complessiva dell'animazione. Nell'esempio precedente viene restituita l'animazione della visualizzazione immagine al nuovo centro rispetto al primo secondo, seguita dalla rotazione di 90 gradi rispetto al secondo successivo. Poiché l'animazione specifica UIViewKeyframeAnimationOptions.Autoreverse
come opzione, entrambi i fotogrammi chiave vengono animati anche in senso inverso. Infine, i valori finali vengono impostati sullo stato iniziale nel gestore di completamento.
Gli screenshot seguenti illustrano l'animazione combinata tramite i fotogrammi chiave:
UIKit Dynamics
UIKit Dynamics è un nuovo set di API in UIKit che consentono alle applicazioni di creare interazioni animate basate sulla fisica. UIKit Dynamics incapsula un motore di fisica 2D per renderlo possibile.
L'API è dichiarativa in natura. Si dichiara il comportamento delle interazioni fisiche creando oggetti , chiamati comportamenti , per esprimere concetti di fisica come gravità, collisioni, sorgenti e così via. Collegare quindi i comportamenti a un altro oggetto, chiamato animatrice dinamica, che incapsula una visualizzazione. L'animatore dinamico si occupa dell'applicazione dei comportamenti di fisica dichiarati agli elementi dinamici, ovvero gli elementi che implementano IUIDynamicItem
, ad esempio .UIView
Esistono diversi comportamenti primitivi disponibili per attivare interazioni complesse, tra cui:
UIAttachmentBehavior
: associa due elementi dinamici in modo che si spostino o allega un elemento dinamico a un punto di allegato.UICollisionBehavior
: consente agli elementi dinamici di partecipare alle collisioni.UIDynamicItemBehavior
: specifica un set generale di proprietà da applicare agli elementi dinamici, ad esempio elasticità, densità e attrito.UIGravityBehavior
- Applica la gravità a un elemento dinamico, causando l'accelerazione degli elementi nella direzione gravitazionale.UIPushBehavior
: applica forza a un elemento dinamico.UISnapBehavior
– Consente a un elemento dinamico di agganciarsi a una posizione con effetto molla.
Anche se esistono molte primitive, il processo generale per l'aggiunta di interazioni basate sulla fisica a una visualizzazione tramite UIKit Dynamics è coerente tra i comportamenti:
- Creare un animatore dinamico.
- Crea comportamenti.
- Aggiungere comportamenti all'animatore dinamico.
Esempio di Dynamics
Di seguito viene illustrato un esempio che aggiunge gravità e un limite di collisione a un oggetto UIView
.
UIGravityBehavior
L'aggiunta della gravità a una visualizzazione immagine segue i 3 passaggi descritti in precedenza.
Verrà usato il ViewDidLoad
metodo per questo esempio. Aggiungere prima di tutto un'istanza UIImageView
come indicato di seguito:
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);
In questo modo viene creata una visualizzazione immagine centrata sul bordo superiore dello schermo. Per rendere l'immagine "cadere" con gravità, creare un'istanza di :UIDynamicAnimator
dynAnimator = new UIDynamicAnimator (this.View);
UIDynamicAnimator
accetta un'istanza di un riferimento UIView
o un oggetto UICollectionViewLayout
, che contiene gli elementi che verranno animati in base ai comportamenti associati.
Creare quindi un'istanza UIGravityBehavior
di . È possibile passare uno o più oggetti che implementano , IUIDynamicItem
ad esempio :UIView
var gravity = new UIGravityBehavior (dynItems);
Il comportamento viene passato a una matrice di IUIDynamicItem
, che in questo caso contiene la singola UIImageView
istanza animata.
Infine, aggiungere il comportamento all'animatore dinamico:
dynAnimator.AddBehavior (gravity);
Ciò comporta l'animazione dell'immagine verso il basso con gravità, come illustrato di seguito:
Poiché non c'è nulla che vincola i limiti dello schermo, la visualizzazione immagine si riduce semplicemente dalla parte inferiore. Per vincolare la visualizzazione in modo che l'immagine collidisca con i bordi dello schermo, è possibile aggiungere un oggetto UICollisionBehavior
. Questo argomento verrà illustrato nella sezione successiva.
UICollisionBehavior
Si inizierà creando un UICollisionBehavior
oggetto e aggiungendolo all'animazione dinamica, proprio come è stato fatto per il UIGravityBehavior
.
Modificare il codice in modo da includere :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);
}
Ha UICollisionBehavior
una proprietà denominata TranslatesReferenceBoundsIntoBoundry
. Impostando questa opzione su true
, i limiti della visualizzazione di riferimento verranno utilizzati come limite di collisione.
Ora, quando l'immagine anima verso il basso con la gravità, rimbalza leggermente fuori dalla parte inferiore dello schermo prima di riposarsi lì.
UIDynamicItemBehavior
È possibile controllare ulteriormente il comportamento della visualizzazione immagine in caduta con comportamenti aggiuntivi. Ad esempio, è possibile aggiungere un UIDynamicItemBehavior
oggetto per aumentare l'elasticità, causando il rimbalzo della visualizzazione immagine in caso di collisione con la parte inferiore dello schermo.
L'aggiunta di segue UIDynamicItemBehavior
gli stessi passaggi di con gli altri comportamenti. Creare prima di tutto il comportamento:
var dynBehavior = new UIDynamicItemBehavior (dynItems) {
Elasticity = 0.7f
};
Aggiungere quindi il comportamento all'animazione dinamica:
dynAnimator.AddBehavior (dynBehavior);
Con questo comportamento sul posto, la visualizzazione immagine rimbalza di più quando si scontra con il limite.
Modifiche generali dell'interfaccia utente
Oltre alle nuove API UIKit, ad esempio UIKit Dynamics, transizioni del controller e animazioni UIView avanzate descritte in precedenza, iOS 7 introduce un'ampia gamma di modifiche visive all'interfaccia utente e modifiche API correlate per diverse visualizzazioni e controlli. Per altre informazioni, vedere Panoramica dell'interfaccia utente di iOS 7.
Kit di testo
Text Kit è una nuova API che offre potenti funzionalità di layout e rendering del testo. Si basa sul framework core text di basso livello, ma è molto più facile da usare rispetto a Core Text.
Per altre informazioni, vedere il nostro TextKit
Multitasking
iOS 7 cambia quando e come viene eseguito il lavoro in background. Il completamento delle attività in iOS 7 non mantiene più attiva le applicazioni quando le attività vengono eseguite in background e le applicazioni vengono riattivate per l'elaborazione in background in modo non contiguo. iOS 7 aggiunge anche tre nuove API per l'aggiornamento delle applicazioni con nuovo contenuto in background:
- Recupero in background: consente alle applicazioni di aggiornare il contenuto in background a intervalli regolari.
- Notifiche remote: consente alle applicazioni di aggiornare il contenuto quando si riceve una notifica push. Le notifiche possono essere invisibile all'utente o possono visualizzare un banner nella schermata di blocco.
- Servizio trasferimento in background: consente il caricamento e il download di dati, ad esempio file di grandi dimensioni, senza un limite di tempo fisso.
Per altre informazioni sulle nuove funzionalità di multitasking, vedere le sezioni iOS della guida di Xamarin Backgrounding.
Riepilogo
Questo articolo illustra diverse importanti aggiunte a iOS. In primo luogo, viene illustrato come aggiungere transizioni personalizzate ai controller di visualizzazione. Viene quindi illustrato come usare le transizioni nelle visualizzazioni della raccolta, sia dall'interno di un controller di spostamento, sia in modo interattivo tra le visualizzazioni della raccolta. Introduce quindi diversi miglioramenti apportati alle animazioni UIView, che illustrano come le applicazioni usano UIKit per gli elementi che in precedenza richiedevano la programmazione direttamente con l'animazione core. Infine, la nuova API di Dynamics UIKit, che porta un motore di fisica in UIKit, è stata introdotta insieme al supporto RTF ora disponibile nel framework di Text Kit.