iOS 3D Touch avec Swift


Exemple

Le toucher 3D a été introduit avec l'iPhone 6s Plus. Deux nouveaux comportements ont été ajoutés à cette nouvelle couche d’interface: Peek et Pop.

Peek and Pop en quelques mots

Peek - Appuyez fort

Pop - Presse vraiment difficile

Vérification du support 3D

Vous devez vérifier si le périphérique dispose d'un support tactile 3D. Vous pouvez le faire en vérifiant la valeur de la propriété forceTouchCapability d'un objet UITraitCollection . UITraitCollection décrit l'environnement d'interface iOS pour votre application.

if (traitCollection.forceTouchCapability == .Available) {    
    registerForPreviewingWithDelegate(self, sourceView: view)
}

Mise en œuvre du délégué

Vous devez implémenter les deux méthodes de UIViewControllerPreviewingDelegate dans votre classe. L'une des méthodes est pour le coup d' oeil et l'autre pour le comportement pop .

La méthode à implémenter pour le peek est previewingContext .

func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
    
    guard let indexPath = self.tableView.indexPathForRowAtPoint(location), cell = self.tableView.cellForRowAtIndexPath(indexPath) as? <YourTableViewCell> else {
        return nil
    }
    
    guard let datailVC = storyboard?.instantiateViewControllerWithIdentifier("<YourViewControllerIdentifier>") as? <YourViewController> else {
        return nil
    }

    datailVC.peekActive = true
    previewingContext.sourceRect = cell.frame

    // Do the stuff
    
    return datailVC

}

La méthode à implémenter pour la pop est previewingContext . :)

func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) {

    let balanceViewController = viewControllerToCommit as! <YourViewController>

    // Do the stuff

    navigationController?.pushViewController(balanceViewController, animated: true)

}

Comme vous pouvez le voir, ce sont des méthodes surchargées. Vous pouvez utiliser le toucher 3D de quelque manière que ce soit en mettant en œuvre ces méthodes.

Objectif c

//Checking for 3-D Touch availability
if ([self.traitCollection respondsToSelector:@selector(forceTouchCapability)] &&
        (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable))
    {
        [self registerForPreviewingWithDelegate:self sourceView:self.view];
    }
//Peek
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext
              viewControllerForLocation:(CGPoint)location {

    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
    Country *country = [self countryForIndexPath:indexPath];
    if (country) {
        CountryCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
        if (cell) {
            previewingContext.sourceRect = cell.frame;
            UINavigationController *navController = [self.storyboard instantiateViewControllerWithIdentifier:@"UYLCountryNavController"];
            [self configureNavigationController:navController withCountry:country];
            return navController;
        }
    }
    return nil;
}
//Pop
- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
    
    [self showDetailViewController:viewControllerToCommit sender:self];
}