iOS 9 een inleiding tot multitasking op de iPad

Invoering

Met iOS 9 introduceerde Apple een aantal multitasking-mogelijkheden voor de iPad. Waaronder Schuif overSplit View, en Foto in foto. Als u niet vertrouwd bent met deze nieuwe functies, vindt u hier een kort overzicht.

Schuif over

Slide Over is beschikbaar op iPad Mini 2 en hoger, alle iPad Air-modellen en iPad Pro. Hiermee kunnen apps vanaf de rechterkant van het scherm schuiven met de volledige hoogte van het scherm (in beide richtingen) en de geschatte breedte van een iPhone-scherm.

Foto in foto

Picture in Picture is beschikbaar op alle iPad-modellen die Slide Over ondersteunen. Hiermee kan een video in een kleine weergave worden weergegeven terwijl u met andere apps op de iPad werkt. Deze kleine weergave bevat drie knoppen om het afspelen te regelen, terug te keren naar volledig scherm, afspelen / pauzeren en sluiten. Het formaat van de weergave kan worden aangepast of tijdelijk naar de zijkant van het scherm worden gedrukt.

Gesplitste weergave

Split View is beschikbaar op iPad Mini 4, iPad Air 2 en iPad Pro. Hiermee kan de iPad twee volledig functionele apps naast elkaar uitvoeren. De gebruiker kan de scheidingslijn tussen de twee apps verplaatsen om ze te vergroten of verkleinen.

Merk op dat de app aan de linkerkant wordt aangeduid als de primair applicatie en de app rechts de tweede app. De primaire toepassing is eigenaar van de statusbalk van het apparaat en neemt altijd ten minste de helft van het scherm in beslag. De primaire app kan door de gebruiker worden gesloten, maar als de divider helemaal naar links wordt verplaatst.

voorwaarden

Deze tutorial vereist dat u Xcode 7 of hoger gebruikt op OS X Yosemite of hoger. Het veronderstelt ook dat je erover hebt geleerd grootteklassen en Automatische lay-out. Als je een voorliefde hebt voor adaptief ontwerp, raad ik aan Jordan Morgan's zelfstudie over adaptief ontwerp te lezen. Je zult ook het startersproject van GitHub moeten downloaden.

1. Slide Over en Split View

Configuratie

Standaard ondersteunen alle apps die zijn gemaakt op basis van een Xcode 7-sjabloon automatisch Slide Over en Split View. Dit komt omdat je app is gemaakt met een LaunchScreen.storyboard bestand en een grootteklasse ingeschakeld Main.storyboard het dossier.

Voor projecten die met een eerdere versie van Xcode zijn gemaakt, kunt u Slide Over en Split View voor uw app inschakelen door de volgende twee stappen te volgen.

Stap 1

Maak een LaunchScreen.storyboard bestand door het te selecteren iOS> Gebruikersinterface> Startscherm sjabloon. Het startscherm wordt weergegeven zodra uw app is gestart vanuit het startscherm en terwijl deze nog wordt geladen.

Merk op dat dit storyboard de statische startafbeeldingen vervangt die u al voor uw toepassing had geconfigureerd.

Stap 2

Zorg ervoor dat uw gebruikersinterface wordt gebruikt grootteklassen en Automatische lay-out. U kunt dit verifiëren door het storyboard van uw project te selecteren, het te openen Bestand Inspector, en tikken op de Gebruik Auto lay-out en Gebruik maatklassen selectievakjes in de Interface Builder-document sectie.

Merk op dat je dit voor elk storyboard in je project moet doen. Nu u weet hoe u een app correct kunt configureren voor Slide Over en Split View, is het tijd om te leren hoe u ervoor kunt zorgen dat uw app goed werkt naast andere apps.

Grootte klassen

Voor Slide Over is de huidige grootteklasse voor uw app altijd dezelfde. Wanneer uw app de primaire app is, heeft deze toegang tot het volledige scherm (normale breedte- en hoogte-grootteklasse) en niets zal anders zijn. Wanneer uw app wordt geopend via de functie Dia over, heeft uw app een compacte breedte en een normale klasse voor hoogte, ongeacht de richting.

Op een iPad die Split View ondersteunt, kan uw app-venster echter op elk moment van grootte worden gewijzigd en moet het worden ontworpen om in deze formaten te passen. Het volgende diagram toont de verschillende configuraties voor app-groottes van gesplitste weergave en de grootteklassen die hieraan zijn gekoppeld:

Bron: Apple's goedkeuring van multitasking-uitbreidingen op de iPad: Slide Over en Split View Quick Start Guide

Zoals je ziet, tenzij je app de primaire applicatie is en het apparaat in de liggende stand staat, zodra je het scherm met een andere app moet delen, wordt je app geforceerd in een compacte breedteklasse. Omdat deze wijziging in grootte afhankelijk is van de gebruiker en op elk moment kan gebeuren, moet uw app soepel overschakelen tussen verschillende weergavegroottes.

Merk op dat op iPad Pro, in landschap en 50/50 gesplitste weergavemodus, beide apps een normale horizontale breedteklasse hebben zoals hieronder getoond.

Schermafbeelding Afkomstig van de Voltooide zelfstudietoepassing

Callback-methoden

Om rekening te houden met deze wijzigingen in grootte, de UIViewController klasse voldoet aan de twee protocollen, UITraitEnvironment en UIContentContainer.

UITraitEnvironment

Dit protocol bevat een UITraitCollection eigenschap genoemd traitCollection en een methode voor het wijzigen van deze eigenschapscollectie, traitCollectionDidChange (_ :). Met dit trait collection-object kunt u specifieke details vinden over de status van uw app, zoals de weergaveschaal, de huidige horizontale en verticale grootteklassen, 3D-touch (Force Touch genoemd door de API) en het huidige apparaattype (iPhone / iPod Touch, iPad, Apple TV of Niet gespecificeerd).

UIContentContainer

Dit protocol bevat een preferredContentSize eigendom evenals talrijke methoden voor wanneer de grootte of eigenschapverzameling voor de huidige container verandert. We zullen twee van de methoden beschreven door de UIContentContainer protocol.

Open het startproject dat je hebt gedownload van GitHub en navigeer naar ViewController.swift. Voeg vervolgens de volgende methoden toe aan de klassedefinitie:

override func viewWillTransitionToSize (size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) self.viewWidth.text = "\ (size.width) pts wide" negeren func willTransitionToTraitCollection (newCollection: UITraitCollection coordinator: UIViewControllerTransitionCoordinator) super.willTransitionToTraitCollection (newCollection, withTransitionCoordinator: coordinator) switch newCollection.horizontalSizeClass case .Compact: self.sizeClass.text = "Compacte horizontale formaatklasse". Regulier: self.sizeClass.text = "Normale horizontale grootte Klasse "case. Niet gespecificeerd: self.sizeClass.text =" Ongespecificeerde horizontale grootteklasse "

In de viewWillTransitionToSize (_: withTransitionCoordinator :) methode, we werken het viewWidth label om de nieuwe breedte van het scherm weer te geven.

In de willTransitionToTraitCollection (_: withTransitionCoordinator :) methode, controleren we om te zien naar welke horizontale grootteklasse wordt overgeschakeld en de sizeClass label dienovereenkomstig.

Je hebt misschien gemerkt dat beide methoden zorgen voor een UIViewControllerTransitionCoordinator parameter. Dit object wordt voornamelijk gebruikt om te werken met animaties tussen view controllers en het heeft niet echt betrekking op Split View multitasking aangezien het systeem de animaties verwerkt. De UIViewControllerTransitionCoordinator parameter bestaat omdat deze UIContentContainer protocolmethoden zijn niet exclusief voor multitasking met gesplitste weergave en kunnen ook in andere scenario's worden uitgevoerd.

Voer uw app uit op een fysiek apparaat of in de iPad Air 2 of iPad Pro-simulator. Zodra de app is gestart, sleept u vanaf de rechterkant van het scherm en selecteert u een van de apps in de lijst.

Nadat de app is geopend, houdt u de kleine balk links van de zojuist geopende app ingedrukt, zoals hieronder wordt weergegeven.

Sleep de scheidingslijn die wordt weergegeven naar het midden van het scherm zoals weergegeven in de volgende schermafbeelding en laat deze los.

Wanneer uw app weer terugvalt, moeten de twee labels worden bijgewerkt met de juiste breedte- en horizontale formaatklasse.

2. Beeld in beeldvideo

Net zoals bij Slide Over en Split View, als je Xcode 7 of hoger gebruikt, zal je app Picture in Picture automatisch ondersteunen. Voor audiovisuele inhoud wordt dit gedaan met behulp van de AVPlayerViewController klasse.

Voordat u Picture in Picture kunt gaan gebruiken, moet u echter een mogelijkheid voor uw doel inschakelen. Selecteer uw doelwit, open de mogelijkheden tab in de Project Navigator, in staat stellen Achtergrond Modi, en vink het aangevinkte vakje aan Audio, AirPlay en Picture in Picture.

Voer uw app opnieuw uit en tik op de Video afspelen knop. De video die ik in het startersproject heb opgenomen, begint te spelen. Ga met de video naar het startscherm door op de startknop op uw apparaat of te drukken Command-Shift-H als u de simulator gebruikt.

U kunt ook op de kleine knop in de linkerbenedenhoek drukken om de Picture in Picture-modus te openen. U zult zien dat de videoweergave tot een minimum beperkt blijft en op het scherm blijft, compleet met knoppen om opnieuw te openen, afspelen / pauzeren en sluiten.

In dit stadium zult u merken dat als u op de knop drukt om de video opnieuw in volledig scherm te bekijken, de app wordt geopend, maar de video-weergavecontroller helemaal niet wordt weergegeven. U kunt dit gedrag wijzigen door de view controller aan te passen AVPlayerViewControllerDelegate protocol.

Begin met het maken van de ViewController klasse conform de AVPlayerViewControllerDelegate protocol.

class ViewController: UIViewController, AVPlayerViewControllerDelegate

Vervang vervolgens prepareForSegue (_: afzender :) met de volgende implementatie:

override func prepareForSegue (segue: UIStoryboardSegue, sender: AnyObject?) let destination = segue.destinationViewController as! AVPlayerViewController destination.delegate = URL zelfl laten zien = NSBundle.mainBundle (). URLForResource ("Video", met extensie: "mp4")! destination.player = AVPlayer (URL: url) destination.player? .play ()

Voeg ten slotte de playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart (_: AVPlayerViewController) methode van de AVPlayerViewControllerDelegate protocol bij de ViewController klasse.

func playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart (playerViewController: AVPlayerViewController) -> Bool return false

Door deze methode te implementeren, zorgen we ervoor dat de viewer van de videospeler niet sluit wanneer de Picture in Picture-modus wordt ingevoerd. Bouw en voer je app opnieuw uit en je zult zien dat wanneer de video opnieuw wordt geopend vanuit Picture in Picture, de video zal blijven spelen.

Als u geen gebruik maakt van een AVPlayerViewController om uw inhoud af te spelen, zijn er andere manieren waarop u Picture in Picture-video kunt ondersteunen. Als u een gebruikt AVPlayerLayer om een ​​aangepaste gebruikersinterface rondom uw video toe te staan, kunt u een AVPictureInPictureController object om Picture in Picture te ondersteunen. Dit is hoe zo'n implementatie er zou kunnen uitzien:

self.pictureinPictureController = AVPictureInPictureController (playerLayer: layer) self.pictureinPictureController.delegate = // Elk object volgens het protocol AVPictureInPictureViewControllerDelegate indien AVPictureInPictureController.isPictureInPictureSupported () // display om Beeld invoeren Picture ... func pictureinPictureButtonPressed () zelf. pictureInPictureController.startPictureInPicture ()

3. iPad Multitasking uitschakelen

Als u om de een of andere reden niet wilt dat uw toepassing Slide Over, Split View of Picture in Picture ondersteunt, kunt u het standaardgedrag van Xcode en iOS overschrijven.

Slide Over en Split View

Voor Slide Over en Split View hoeft u alleen maar het volgende toe te voegen UIRequiresFullScreen sleutel tot uw apps Info.plist bestand en stel het in op JA.

Foto in foto

Met de AVPlayerViewController klasse, hoeft u alleen de allowsPictureInPicturePlayback eigendom aan vals.

Voor Picture-in-Picture met een AVPlayerLayer object, u maakt geen AVPictureInPictureController.

Ten slotte voor video's die via internet worden weergegeven via een WKWebView, je moet de allowsPictureInPicturePlayback eigendom van de view's configuratie naar vals.

Conclusie

Je moet nu alle vertrouwen in het creëren van toepassingen die de nieuwe Slide ondersteunen Over, Split View, en Picture in Picture multitasking mogelijkheden om iPad toegevoegd op iOS 9. Zoals u kunt zien, deze nieuwe functies maken de iPad een veel productiever gereedschap en ze zijn erg gemakkelijk voor ontwikkelaars om te implementeren in hun eigen applicaties.

Zoals altijd kunt u uw opmerkingen en feedback achterlaten in de opmerkingen hieronder.