iOS 9 een inleiding tot 3D Touch

Invoering

Met de iPhone 6s en 6s Plus introduceerde Apple een geheel nieuwe manier van communiceren met onze apparaten genaamd 3D Touch. 3D Touch werkt door de hoeveelheid druk te detecteren die u op het scherm van uw telefoon toepast om verschillende acties uit te voeren. In deze zelfstudie laat ik je zien hoe je kunt profiteren van 3D Touch, zodat je deze nieuwe technologie kunt gebruiken in je eigen iOS 9-apps.

voorwaarden

Voor deze zelfstudie is vereist dat u Xcode 7.1 of hoger gebruikt. Op het moment van schrijven ondersteunt de iOS Simulator nog geen 3D Touch, wat betekent dat tests moeten worden uitgevoerd op een fysiek apparaat, iPhone 6s of iPhone 6s Plus. Als je wilt meevolgen, begin dan met het downloaden van het startersproject van GitHub.

1. Kijk en pop in storyboards

In dit eerste deel laat ik u zien hoe u het kunt implementeren Peek en pop functionaliteit in uw app met storyboards en een beetje code. Als je niet weet wat Peek en Pop is, is het eigenlijk een manier om met een beetje meer kracht op een element in de gebruikersinterface te drukken om er een 'kijkje' bij te nemen.

Van een dergelijke preview kun je vervolgens je vinger opheffen om het te negeren of nog een beetje harder drukken om het op volledig scherm te "knallen". "Keurbare" items kunnen elke weergavecontroller zijn, inclusief dingen zoals e-mails, berichten en webpagina's zoals weergegeven in de onderstaande schermafbeelding.

Open het startersproject in Xcode en navigeer naar Main.storyboard. Zoom het storyboard uit door te knijpen op uw trackpad of door op te drukken Commando + -. Selecteer de segue die wordt weergegeven in de volgende schermafbeelding.

Met deze segue geselecteerd, opent u de attributen Inspecteur en zoek naar een nieuwe sectie met de naam Peek en pop. Schakel het selectievakje in en configureer het gedrag zoals hieronder wordt weergegeven.

In dit menu kunt u eigen identificaties toewijzen aan zowel de Peek (Voorbeeld) en Pop (plegen) segmenten. De commit-segue heeft ook opties om alles wat je kunt configureren voor een gewone segue in storyboards zoals Klassemodule, en Soort.

Bouw en run je app op je iPhone en druk op de + knop in de rechterbovenhoek om een ​​nieuw item te maken.

Druk stevig op het item en u zult zien dat we een voorbeeld krijgen van de detailweergavecontroller voor dat item.

U zult zien dat onze detailweergave nog niet de juiste gegevens voor het item dat we bekijken weergeeft. Dit komt omdat we de weergave nog niet hebben geconfigureerd voor de aangepaste voorbeeldsegmenten die we in het storyboard hebben gedefinieerd. Terug in je project, open MasterViewController.swift en vervang de prepareForSegue (_: afzender :) methode met de volgende implementatie:

override func prepareForSegue (segue: UIStoryboardSegue, sender: AnyObject?) if segue.identifier == "showDetail" if let indexPath = self.tableView.indexPathForSelectedRow let object = objects [indexPath.row] as! NSDate laat controller = (segue.destinationViewController as! UINavigationController) .topViewController as! DetailViewController controller.detailItem = object controller.navigationItem.leftBarButtonItem = self.splitViewController? .DisplayModeButtonItem () controller.navigationItem.leftItemsSupplementBackButton = true else als cel = afzender laten zoals? UITableViewCell waarbij segue.identifier == "showDetailPeek" let controller = (segue.destinationViewController as! UINavigationController) .topViewController as! DetailViewController controller.detailItem = cell.textLabel? .Text controller.navigationItem.leftBarButtonItem = self.splitViewController? .DisplayModeButtonItem () controller.navigationItem.leftItemsSupplementBackButton = true

De eerste als verklaring blijft ongewijzigd. Als deze code niet wordt uitgevoerd, controleren we vervolgens of de afzender een is UITableViewCell en de segue-identifier is gelijk aan "ShowDetailPeek". Als aan beide voorwaarden is voldaan, configureren we de detailItem naar de tekst van de cel.

Bouw en voer je app opnieuw uit. Deze keer moet je bij het bekijken van een item een ​​goed geconfigureerd voorbeeld krijgen, zoals hieronder te zien is.

Een belangrijk ding om op te merken is dat deze storyboard-configuraties voor Peek en Pop alleen werken op apparaten met iOS 9.1 of hoger. Als u apparaten met iOS 9.0 wilt ondersteunen, moet u uw Peek en Pop-functionaliteit in code configureren, zoals in het volgende gedeelte.

2. Peek en pop in code

Hoewel het een beetje ingewikkelder is dan de installatie van het storyboard, kunt u met het programmatisch implementeren van Peek en Pop ook extra acties toevoegen aan uw voorbeelden wanneer de gebruiker naar boven veegt. Bekijk de volgende schermafbeelding om beter te begrijpen wat ik bedoel.

Peek en pop wordt in code verwerkt door de UIViewControllerPreviewingDelegate protocol. Maak een nieuw in je project iOS> Bron> Swift File en noem het MasterPreviewing.

Voeg de volgende code toe aan MasterPreviewing.swift:

import UIKit-uitbreiding MasterViewController: UIViewControllerPreviewingDelegate func previewingContext (previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? guard let viewController = self.storyboard? .instantiateViewControllerWithIdentifier ("forceViewController") als? ForceViewController else return nil viewController.preferredContentSize = CGSize (width: 0, height: 0) return viewController func previewingContext (previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) showViewController (viewControllerToCommit, sender: self)

Wij maken de MasterViewController klasse conform de UIViewControllerPreviewingDelegate protocol.

In de previewingContext (_: viewControllerForLocation :) methode, we instantiëren een ForceViewController van het storyboard en retourneer dit object. De preferredContentSize eigenschap bepaalt hoe groot het Peek-voorbeeld op het scherm zal verschijnen. Wanneer een maat van (0, 0) wordt gebruikt, maakt het voorbeeld zichzelf automatisch zo groot als het kan voor het huidige scherm.

In de previewingContext (_: commitViewController :) methode, voltooien we de overgang van de MasterViewController bijvoorbeeld en Pop de ForceViewController we hebben in de Peek-fase op het scherm gemaakt.

Om deze nieuwe code te kunnen gebruiken, moeten we ook specifieke weergaven registreren waarvoor we een voorbeeld willen genereren wanneer deze stevig wordt ingedrukt. Om dit te doen, open MasterViewController.swift en voeg de volgende code toe aan viewDidLoad ():

if traitCollection.forceTouchCapability == .Available self.registerForPreviewingWithDelegate (self, sourceView: forceButton)

We controleren eerst of 3D Touch beschikbaar is op het apparaat (door de API Force Touch genoemd). Als dat het geval is, registreren we de forceButton (die onderaan de tabel) als een in aanmerking komend beeld voor Peek en Pop met.

Tot slot, om acties aan een preview toe te voegen, moet je ze in de preview's definiërenbekijk controllerklasse. Open ForceViewController.swift en voeg de volgende methode toe aan de klas:

override func previewActionItems () -> [UIPreviewActionItem] let regularAction = UIPreviewAction (title: "Regular", style: .Default) (actie: UIPreviewAction, vc: UIViewController) -> Void in let destructiveAction = UIPreviewAction (title: " Destructief ", style: .Destructive) (actie: UIPreviewAction, vc: UIViewController) -> Void in let actionGroup = UIPreviewActionGroup (title:" Group ... ", style: .Default, actions: [regularAction, destructiveAction]) return [ regularAction, destructiveAction, actionGroup]

We creëren drie acties om weer te geven met de ForceViewController preview. De eerste is een reguliere actie en is de meest voorkomende. Wanneer deze actie is geselecteerd, wordt het (momenteel lege) codeblok dat u definieert wanneer u de actie maakt, uitgevoerd. De tweede is een destructieve actie die precies hetzelfde zal werken als de eerste, maar deze zal rood op het voorbeeldscherm verschijnen. Ten slotte creëren we een actiegroep die een aantal andere acties onder een enkele knop samenvouwt.

Bouw en voer uw app opnieuw uit. Druk deze keer stevig op de Dwingen om een ​​nieuw te zien ForceViewController voorbeeld zoals hieronder getoond.

Veeg omhoog in dit voorbeeld om de acties te bekijken die we hebben gedefinieerd in de ForceViewController klasse.

Druk ten slotte op Groep… actie om de acties in die groep te openen.

3. Force door detecteren UITouch

Op apparaten die compatibel zijn met 3D Touch, de UITouch klasse krijgt ook wat nieuwe functionaliteit in de vorm van twee nieuwe eigenschappen, dwingen en maximumPossibleForce. Deze eigenschappen zijn zeer handig voor elk gebruik waarbij u een nauwkeurige meting wilt van hoeveel druk er op het scherm wordt uitgeoefend.

Begin door de volgende methode toe te voegen aan de ForceViewController klasse:

override func touchesMoved (aanraken: instellen, withEvent event: UIEvent?) if let touch = touches.first where traitCollection.forceTouchCapability == .Available self.forceOutput.text = "\ (touch.force) \ n \ (touch.maximumPossibleForce)"

We detecteren wanneer een aanraking op het scherm beweegt, inclusief naar en uit de buurt van het scherm. We halen de huidige kracht die wordt toegepast vanaf de eerste UITouch object in de set en geef de waarden op het scherm weer.

Bouw en voer uw app uit en druk op de Dwingen om het te openen ForceViewController. Duw overal op het scherm met variërende hoeveelheden druk en u zult zien dat het label op het scherm dienovereenkomstig wordt bijgewerkt om de huidige uitgeoefende kracht weer te geven, evenals de maximale kracht die kan worden uitgeoefend.

Merk op dat deze waarden niet aan een fysieke eenheid zijn gekoppeld en onafhankelijk zijn van de 3D Touch-gevoeligheidsinstellingen van de gebruiker. Een waarde van 1.0 vertegenwoordigt de kracht die wordt uitgeoefend op een gemiddelde aanraking.

4. Snelle acties op het startscherm

Naast de nieuwe in-app-functionaliteit die 3D Touch biedt, kunt u ook maximaal vier sneltoetsen toevoegen voor specifieke functies van uw toepassing op uw app-pictogram. Deze snelle acties zijn toegankelijk wanneer een gebruiker diep op het pictogram van uw app op het startscherm drukt, zoals getoond in de volgende schermafbeelding.

Er zijn twee hoofdtypen van snelle acties die u kunt maken voor uw app, statisch en dynamisch. Statische snelle acties worden gedefinieerd in uw app's Info.plist en zijn te allen tijde beschikbaar voor uw toepassing. Dynamische snelle acties worden in uw code gemaakt en aan het gedeelde toegevoegd UiApplication object voor uw app.

Voor onze app gaan we zowel een statische als een dynamische snelle actie maken die exact dezelfde implementatie heeft, een nieuw item toevoegen aan de tabelweergave. Het laat je zien hoe je beide actietypen in je eigen applicaties kunt gebruiken.

Snelle acties worden vertegenwoordigd door de nieuwe UIApplicationShortcutItem klasse, die de volgende eigenschappen heeft:

  • localizedTitle de hoofdtitel van de snelle actie (bijv. Nieuw tabblad in de bovenstaande screenshot)
  • localizedSubtitle een optionele ondertitel voor de snelle actie, die onder de hoofdtitel wordt weergegeven
  • type een unieke tekenreeks-ID die u kunt gebruiken om te bepalen welke snelle actie is geselecteerd
  • icoon een optioneel UIApplicationShortcutIcon object dat een door het systeem geleverd pictogram of een aangepaste afbeelding kan weergeven
  • gebruikers informatie een optioneel woordenboek, dat handig is om gegevens aan een snelle actie te koppelen

Ten eerste gaan we de statische snelle actie maken. Open de doelwitten Info.plist bestand en voeg de volgende items precies toe zoals in de onderstaande schermafbeelding:

Merk op dat de UIApplicationShortcutItemIconType sleutel kan worden verwisseld met de UIApplicationShortcutItemIconFile toets met de waarde die de afbeeldingsbestandsnaam is die u wilt gebruiken. De UIApplicationShortcutItemUserInfo de door ons geleverde waarde is ook slechts een eenvoudig voorbeeldwoordenboek om u te laten zien hoe u uw eigen aangepaste gegevens kunt instellen.

Vervolgens gaan we de dynamische actie maken. Open MasterViewController.swift en voeg de volgende twee regels code toe in de viewDidLoad () methode:

laat shortcut = UIApplicationShortcutItem (type: "com.tutsplus.Introducing-3D-Touch.add-item", localizedTitle: "Item toevoegen", localizedSubtitle: "Dynamic Action", icon: UIApplicationShortcutIcon (type: .Add), userInfo: nil ) UIApplication.sharedApplication (). ShortcutItems = [snelkoppeling]

Zo hebt u zowel een statische als dynamische snelle actie voor uw toepassing gemaakt.

Ten slotte moeten we omgaan met de logica van onze app voor wanneer deze snelle acties daadwerkelijk worden geselecteerd op het startscherm. Dit wordt afgehandeld door de afgevaardigden van uw app applicatie (_: performActionForShortcutItem: completionHandler :) methode. Open AppDelegate.swift en voeg de volgende methode toe aan de AppDelegate klasse:

func applicatie (toepassing: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) if shortcutItem.type == "com.tutsplus.Introducing-3D-Touch.add-item" let splitViewViewController = self.window !. RootViewController als! UISplitViewController laat navigationController = SplitViewController.viewControllers [splitViewController.viewControllers.count-1] as! UINavigationController laat masterViewController = navigationController.viewControllers [0] als! MasterViewController masterViewController.insertNewObject (UIButton ()) completionHandler (true) completionHandler (false)

We controleren eerst het type snelle actie en vervolgens de MasterViewController voorwerp. Voor dit object noemen we de insertNewObject (_ :) methode om een ​​nieuw item in te voegen in de tabelweergave. Merk op dat deze methode wordt geleverd door de iOS> Toepassing> Master-Detail-toepassing sjabloon en vereist een AnyObject parameter. Deze parameter wordt echter niet gebruikt in de daadwerkelijke methode-implementatie en kan elk object zijn. Ten slotte noemen we het completionHandler met een Booleaanse waarde om aan het systeem te vertellen of de snelle actie al dan niet met succes is uitgevoerd.

Bouw en voer uw app nog één keer uit. Zodra het is geladen, gaat u naar het startscherm van uw apparaat en drukt u stevig op het app-pictogram. U zult zien dat er twee snelle acties beschikbaar zijn voor uw app.

Druk vervolgens op een van deze opties en uw toepassing moet worden geopend met een nieuw item dat aan de tabelweergave is toegevoegd.

Conclusie

U zou nu vertrouwd moeten zijn met de 3D Touch API's die beschikbaar zijn in iOS 9, inclusief Peek en Pop, waarbij kracht wordt gedetecteerd via UITouch, en snelle acties op het startscherm. 3D Touch biedt vele nieuwe manieren om met uw apparaat te communiceren en ik moedig iedereen ten zeerste aan om het binnen hun eigen toepassingen toe te passen.

Zoals altijd kunt u hieronder uw opmerkingen en feedback achterlaten.