Introducción a la función táctil 3D en Xamarin. iOSIntroduction to 3D Touch in Xamarin.iOS

En este artículo se explica el uso de los nuevos movimientos de iPhone 6S y iPhone 6S Plus 3D Touch en la aplicación.This article covers using the new iPhone 6s and iPhone 6s Plus 3D Touch gestures in your app.

En este artículo se proporciona una introducción al uso de las nuevas API de toque 3D para agregar gestos sensibles a la presión a las aplicaciones de Xamarin. iOS que se ejecutan en los nuevos dispositivos iPhone 6S y iPhone 6S Plus.This article will provide and introduction to using the new 3D Touch APIs to add pressure sensitive gestures to your Xamarin.iOS apps that are running on the new iPhone 6s and iPhone 6s Plus devices.

Con la función táctil 3D, una aplicación de iPhone ahora es capaz de no solo indicar que el usuario está tocando la pantalla del dispositivo, pero es capaz de detectar cuánta presión está ejerciendo el usuario y responder a los diferentes niveles de presión.With 3D Touch, an iPhone app is now able to not only tell that the user is touching the device's screen, but it is able to sense how much pressure the user is exerting and respond to the different pressure levels.

en 3D Touch se proporcionan las siguientes características a la aplicación:3D Touch provides the following features to your app:

  • Sensibilidad a la presión: ahora, las aplicaciones pueden medir el grado de dificultad o luz que el usuario toca con la pantalla y aprovechar esa información.Pressure Sensitivity - Apps can now measure how hard or light the user is touching the screen and take advantage of that information. Por ejemplo, una aplicación de dibujo puede hacer que una línea sea más gruesa o más delgada en función de cómo toque el usuario a la pantalla.For example, a painting app can make a line thicker or thinner based on how hard the user is touching the screen.
  • PEEK y pop : la aplicación ahora puede permitir que el usuario interactúe con sus datos sin tener que navegar fuera de su contexto actual.Peek and Pop - Your app can now let the user interact with its data without having to navigate out of their current context. Al presionar el dedo en la pantalla, puede ver el elemento que le interesan (por ejemplo, al obtener una vista previa de un mensaje).By pressing hard on the screen the screen, they can peek at the item they are interested in (like previewing a message). Al presionar más duro, pueden entrar en el elemento.By pressing harder, they can pop into the item.
  • Acciones rápidas : Piense en acciones rápidas como los menús contextuales que se pueden desplegar cuando un usuario hace clic con el botón derecho en un elemento de una aplicación de escritorio.Quick Actions - Think of Quick Actions like the contextual menus that can be popped-up when a user right-clicks on an item in a desktop app. Con las acciones rápidas, puede agregar accesos directos a las funciones de la aplicación directamente desde el icono de la aplicación en la pantalla principal.Using Quick Actions, you can add shortcuts to functions in your app directly from the app icon on the Home screen.
  • Prueba de la función táctil 3D en el simulador : con el hardware de Mac correcto, puede probar aplicaciones 3D táctiles habilitadas en el simulador de iOS.Testing 3D Touch in the Simulator - With the correct Mac hardware, you can test 3D Touch enabled apps in the iOS Simulator.

Sensibilidad a la presiónPressure Sensitivity

Como se indicó anteriormente, mediante el uso de nuevas propiedades de la clase UITouch , puede medir la cantidad de presión que el usuario aplica a la pantalla del dispositivo iOS y usar esta información en la interfaz de usuario.As stated above, by using new properties of the UITouch class you can measure the amount of pressure the user is applying to the iOS device's screen and use this information in your user interface. Por ejemplo, crear un trazo de pincel más translúcido u opaco en función de la cantidad de presión.For example, making a brush stroke more translucent or opaque based on the amount of pressure.

Como resultado de la función táctil 3D, si la aplicación se ejecuta en iOS 9 (o superior) y el dispositivo iOS es capaz de admitir la funcionalidad táctil 3D, los cambios en la presión harán que se genere el evento TouchesMoved.As a result of 3D Touch, if your app is running on iOS 9 (or greater) and the iOS device is capable of supporting 3D Touch, changes in pressure will cause the TouchesMoved event to be raised.

Por ejemplo, al supervisar el evento TouchesMoved de una UIView, puede usar el código siguiente para obtener la presión actual que el usuario aplica a la pantalla:For example, when monitoring the TouchesMoved event of a UIView, you can use the following code to get the current pressure that the user is applying to the screen:

public override void TouchesMoved (NSSet touches, UIEvent evt)
{
    base.TouchesMoved (touches, evt);
    UITouch touch = touches.AnyObject as UITouch;
    if (touch != null)
    {
        // Get the pressure
        var force = touch.Force;
        var maxForce = touch.MaximumPossibleForce;

        // Do something with the touch and the pressure
        ...
    }
}

La propiedad MaximumPossibleForce devuelve el valor más alto posible para la propiedad Force de UITouch basándose en el dispositivo iOS en el que se ejecuta la aplicación.The MaximumPossibleForce property returns the highest possible value for the Force property of the UITouch based on the iOS device that the app is running on.

Importante

Los cambios de presión harán que se produzca el evento de TouchesMoved, incluso si las coordenadas X/Y no han cambiado.Changes in pressure will cause the TouchesMoved event to be raised, even if the X/Y coordinates have not changed. Debido a este cambio de comportamiento, las aplicaciones iOS deben estar preparadas para que el evento TouchesMoved se invoque con más frecuencia y para que las coordenadas X/Y sean iguales que la última llamada TouchesMoved.Because of this change in behavior, your iOS apps should be prepared for the TouchesMoved event to be invoked more often and for the X/Y coordinates to be the same as the last TouchesMoved call.

Para obtener más información, consulte TouchCanvas de Apple: uso de UITouch de aplicación de ejemplo eficaz y eficaz y referencia de clase UITouch.For more information, please see Apple's TouchCanvas: Using UITouch efficiently and effectively sample app and UITouch Class Reference.

Inspeccionar y extraerPeek and Pop

la función táctil 3D proporciona nuevas formas de que un usuario interactúe con la información de su aplicación más rápido que nunca, sin tener que navegar desde su ubicación actual.3D Touch provides new ways for a user to interact with information within your app quicker than ever, without having to navigate from their current location.

Por ejemplo, si la aplicación muestra una tabla de mensajes, el usuario puede pulsar en un elemento para obtener una vista previa de su contenido en una vista de superposición (a la que Apple hace referencia como un vistazo).For example, if your app is displaying a table of messages, the user can press hard on an item to preview its content in an overlay view (which Apple refers to as a Peek).

Si el usuario presiona más duro, entrará en la vista normal de mensajes (lo que se conoce como ping en lavista).If the user presses harder, they will enter the regular message view (which is referred to as Pop-ping into the view).

Comprobar la disponibilidad de la función táctil 3DChecking for 3D Touch Availability

Al trabajar con una UIViewController puede usar el código siguiente para ver si el dispositivo iOS en el que se ejecuta la aplicación admite la funcionalidad táctil 3D:When working with a UIViewController you can use the following code to see if the iOS device the app is running on supports 3D Touch:

public override void TraitCollectionDidChange(UITraitCollection previousTraitCollection)
{
    //Important: call the base function
    base.TraitCollectionDidChange(previousTraitCollection);

    //See if the new TraitCollection value includes force touch
    if (TraitCollection.ForceTouchCapability == UIForceTouchCapability.Available) {
        //Do something with 3D touch, for instance...
        RegisterForPreviewingWithDelegate (this, View);
        ...

Se puede llamar a este método antes o después de ViewDidLoad().This method may be called before or after ViewDidLoad().

Control de PEEK y popHandling Peek and Pop

En un dispositivo iOS que puede controlar la funcionalidad táctil 3D, podemos usar una instancia de la clase UIViewControllerPreviewingDelegate para administrar la presentación de los detalles de los elementos PEEK y pop .On an iOS device that can handle 3D Touch, we can use an instance of the UIViewControllerPreviewingDelegate class to handle the display of Peek and Pop item details. Por ejemplo, si tenemos un controlador de vista de tabla llamado MasterViewController podríamos usar el código siguiente para admitir PEEK y pop:For example, if we had a Table View Controller called MasterViewController we could use the following code to support Peek and Pop:

using System;
using System.Collections.Generic;
using UIKit;
using Foundation;
using CoreGraphics;

namespace DTouch
{
    public class PreviewingDelegate : UIViewControllerPreviewingDelegate
    {
        #region Computed Properties
        public MasterViewController MasterController { get; set; }
        #endregion

        #region Constructors
        public PreviewingDelegate (MasterViewController masterController)
        {
            // Initialize
            this.MasterController = masterController;
        }

        public PreviewingDelegate (NSObjectFlag t) : base(t)
        {
        }

        public PreviewingDelegate (IntPtr handle) : base (handle)
        {
        }
        #endregion

        #region Override Methods
        /// Present the view controller for the "Pop" action.
        public override void CommitViewController (IUIViewControllerPreviewing previewingContext, UIViewController viewControllerToCommit)
        {
            // Reuse Peek view controller for details presentation
            MasterController.ShowViewController(viewControllerToCommit,this);
        }

        /// Create a previewing view controller to be shown at "Peek".
        public override UIViewController GetViewControllerForPreview (IUIViewControllerPreviewing previewingContext, CGPoint location)
        {
            // Grab the item to preview
            var indexPath = MasterController.TableView.IndexPathForRowAtPoint (location);
            var cell = MasterController.TableView.CellAt (indexPath);
            var item = MasterController.dataSource.Objects [indexPath.Row];

            // Grab a controller and set it to the default sizes
            var detailViewController = MasterController.Storyboard.InstantiateViewController ("DetailViewController") as DetailViewController;
            detailViewController.PreferredContentSize = new CGSize (0, 0);

            // Set the data for the display
            detailViewController.SetDetailItem (item);
            detailViewController.NavigationItem.LeftBarButtonItem = MasterController.SplitViewController.DisplayModeButtonItem;
            detailViewController.NavigationItem.LeftItemsSupplementBackButton = true;

            // Set the source rect to the cell frame, so everything else is blurred.
            previewingContext.SourceRect = cell.Frame;

            return detailViewController;
        }
        #endregion
    }
}

El método GetViewControllerForPreview se usa para realizar la operación de lectura .The GetViewControllerForPreview method is used to perform the Peek operation. Obtiene acceso a la celda de la tabla y a los datos de respaldo y, a continuación, carga el DetailViewController desde el guión gráfico actual.It gains access to the table cell and backing data and then loads the DetailViewController from the current Storyboard. Al establecer el PreferredContentSize en (0,0), se solicita el tamaño predeterminado de la vista de búsqueda .By setting the PreferredContentSize to (0,0) we are asking for the default Peek view size. Por último, se desenfoca todo excepto la celda que se muestra con previewingContext.SourceRect = cell.Frame y se devuelve la nueva vista para mostrarla.Finally, we blur everything but the cell we are displaying with previewingContext.SourceRect = cell.Frame and we return the new view for display.

En el CommitViewController se vuelve a usar la vista que creamos en la vista del pop cuando el usuario presiona más difícil.The CommitViewController reuses the view we created in the Peek for the Pop view when the user presses harder.

Registro para PEEK y popRegistering for Peek and Pop

En el controlador de vista en el que queremos permitir que el usuario examine y examine los elementos, es necesario registrarse para este servicio.From the View Controller that we want to allow the user to Peek and Pop items from, we need to register for this service. En el ejemplo anterior de un controlador de vista de tabla (MasterViewController), se usaría el siguiente código:In the example given above of a Table View Controller (MasterViewController), we would use the following code:

public override void ViewDidLoad ()
{
    base.ViewDidLoad ();

    // Check to see if 3D Touch is available
    if (TraitCollection.ForceTouchCapability == UIForceTouchCapability.Available) {
        // Register for Peek and Pop
        RegisterForPreviewingWithDelegate(new PreviewingDelegate(this), View);
    }
    ...

}

Aquí vamos a llamar al método RegisterForPreviewingWithDelegate con una instancia del PreviewingDelegate que hemos creado anteriormente.Here we are calling the RegisterForPreviewingWithDelegate method with an instance of the PreviewingDelegate we created above. En los dispositivos iOS que admiten la función táctil 3D, el usuario puede pulsar en un elemento para leerlo.On iOS devices that support 3D Touch, the user can press hard on an item to Peek at it. Si presionan incluso más difíciles, el elemento se mostrará en la vista estándar.If they press even harder, the item will Pop into it standard display view.

Para obtener más información, consulte el ejemplo de ApplicationShortcuts de iOS 9 y ViewControllerPreviews de Apple: uso de la aplicación de ejemplo de vista previa de UIViewController API, referencia de clase UIPreviewAction, UIPreviewActionGroup Referencia de clase y Referencia del protocolo UIPreviewActionItem.For more information, please see our iOS 9 ApplicationShortcuts Sample and Apple's ViewControllerPreviews: Using the UIViewController previewing APIs sample app, UIPreviewAction Class Reference, UIPreviewActionGroup Class Reference and UIPreviewActionItem Protocol Reference.

Acciones rápidasQuick Actions

Con las acciones rápidas y táctiles 3D, puede agregar accesos directos comunes y rápidos y fáciles de acceder a las funciones de la aplicación desde el icono de la pantalla principal del dispositivo iOS.Using 3D Touch and Quick Actions, you can add common, quick and easy to access shortcuts to functions in your app from the Home screen icon on the iOS device.

Como se indicó anteriormente, puede considerar acciones rápidas como los menús contextuales que se pueden desplegar cuando un usuario hace clic con el botón derecho en un elemento de una aplicación de escritorio.As stated above, you can think of Quick Actions like the contextual menus that can be popped-up when a user right-clicks on an item in a desktop app. Debe usar acciones rápidas para proporcionar accesos directos a las funciones o características más comunes de la aplicación.You should use Quick Actions to provide shortcuts to the most common functions or features of your app.

Definir acciones rápidas estáticasDefining Static Quick Actions

Si una o varias de las acciones rápidas que requiere la aplicación son estáticas y no necesita cambiar, puede definirlas en el archivo de Info.plist de la aplicación.If one or more of the Quick Actions required by your app are static and do not need to change, you can define them in the app's Info.plist file. Edite este archivo en un editor externo y agregue las claves siguientes:Edit this file in an external editor and add the following keys:

<key>UIApplicationShortcutItems</key>
<array>
    <dict>
        <key>UIApplicationShortcutItemIconType</key>
        <string>UIApplicationShortcutIconTypeSearch</string>
        <key>UIApplicationShortcutItemSubtitle</key>
        <string>Will search for an item</string>
        <key>UIApplicationShortcutItemTitle</key>
        <string>Search</string>
        <key>UIApplicationShortcutItemType</key>
        <string>com.company.appname.000</string>
    </dict>
    <dict>
        <key>UIApplicationShortcutItemIconType</key>
        <string>UIApplicationShortcutIconTypeShare</string>
        <key>UIApplicationShortcutItemSubtitle</key>
        <string>Will share an item</string>
        <key>UIApplicationShortcutItemTitle</key>
        <string>Share</string>
        <key>UIApplicationShortcutItemType</key>
        <string>com.company.appname.001</string>
    </dict>
</array>

Aquí vamos a definir dos elementos de acción rápida estáticos con las claves siguientes:Here we are defining two static Quick Action items with the following keys:

  • UIApplicationShortcutItemIconType: define el icono que se mostrará en el elemento de acción rápida como uno de los siguientes valores:UIApplicationShortcutItemIconType - Defines the icon that will be displayed by the Quick Action item as one of the following values:

    • UIApplicationShortcutIconTypeAdd
    • UIApplicationShortcutIconTypeAlarm
    • UIApplicationShortcutIconTypeAudio
    • UIApplicationShortcutIconTypeBookmark
    • UIApplicationShortcutIconTypeCapturePhoto
    • UIApplicationShortcutIconTypeCaptureVideo
    • UIApplicationShortcutIconTypeCloud
    • UIApplicationShortcutIconTypeCompose
    • UIApplicationShortcutIconTypeConfirmation
    • UIApplicationShortcutIconTypeContact
    • UIApplicationShortcutIconTypeDate
    • UIApplicationShortcutIconTypeFavorite
    • UIApplicationShortcutIconTypeHome
    • UIApplicationShortcutIconTypeInvitation
    • UIApplicationShortcutIconTypeLocation
    • UIApplicationShortcutIconTypeLove
    • UIApplicationShortcutIconTypeMail
    • UIApplicationShortcutIconTypeMarkLocation
    • UIApplicationShortcutIconTypeMessage
    • UIApplicationShortcutIconTypePause
    • UIApplicationShortcutIconTypePlay
    • UIApplicationShortcutIconTypeProhibit
    • UIApplicationShortcutIconTypeSearch
    • UIApplicationShortcutIconTypeShare
    • UIApplicationShortcutIconTypeShuffle
    • UIApplicationShortcutIconTypeTask
    • UIApplicationShortcutIconTypeTaskCompleted
    • UIApplicationShortcutIconTypeTime
    • UIApplicationShortcutIconTypeUpdate

  • UIApplicationShortcutItemSubtitle: define el subtítulo del elemento.UIApplicationShortcutItemSubtitle - Defines the subtitle for the item.

  • UIApplicationShortcutItemTitle: define el título del elemento.UIApplicationShortcutItemTitle - Defines the title for the item.

  • UIApplicationShortcutItemType: es un valor de cadena que se usará para identificar el elemento en la aplicación.UIApplicationShortcutItemType - Is a string value that we will use to identify the item in our app. Para obtener más información, vea la sección siguiente.See the following section for more information.

Importante

No se puede tener acceso a los elementos de acceso directo de acción rápida que se establecen en el archivo Info.plist con la propiedad Application.ShortcutItems.Quick Action shortcut items that are set in the Info.plist file cannot be accessed with the Application.ShortcutItems property. Solo se pasan al controlador de eventos HandleShortcutItem.They are only passed in to the HandleShortcutItem event handler.

Identificar elementos de acción rápidaIdentifying Quick Action Items

Como vimos anteriormente, al definir los elementos de acción rápida en la Info.plistde la aplicación, ha asignado un valor de cadena a la clave UIApplicationShortcutItemType para identificarlos.As you saw above, when you defined your Quick Action items in your app's Info.plist, you assigned a string value to the UIApplicationShortcutItemType key to identify them.

Para facilitar el trabajo con estos identificadores en el código, agregue una clase denominada ShortcutIdentifier al proyecto de la aplicación y haga que tenga un aspecto similar al siguiente:To make those identifiers easier to work with in code, add an class called ShortcutIdentifier to your app's project and make it look like the following:

using System;

namespace AppSearch
{
    public static class ShortcutIdentifier
    {
        public const string First = "com.company.appname.000";
        public const string Second = "com.company.appname.001";
        public const string Third = "com.company.appname.002";
        public const string Fourth = "com.company.appname.003";
    }
}

Controlar una acción rápidaHandling a Quick Action

A continuación, debe modificar el archivo de AppDelegate.cs de la aplicación para controlar el usuario que selecciona un elemento de acción rápida en el icono de la aplicación en la pantalla principal.Next, you need to modify your app's AppDelegate.cs file to handle the user selecting a Quick Action item from your app's icon on the Home screen.

Realice las siguientes modificaciones:Make the following edits:

using System;
...

public UIApplicationShortcutItem LaunchedShortcutItem { get; set; }

public bool HandleShortcutItem(UIApplicationShortcutItem shortcutItem) {
    var handled = false;

    // Anything to process?
    if (shortcutItem == null) return false;

    // Take action based on the shortcut type
    switch (shortcutItem.Type) {
    case ShortcutIdentifier.First:
        Console.WriteLine ("First shortcut selected");
        handled = true;
        break;
    case ShortcutIdentifier.Second:
        Console.WriteLine ("Second shortcut selected");
        handled = true;
        break;
    case ShortcutIdentifier.Third:
        Console.WriteLine ("Third shortcut selected");
        handled = true;
        break;
    case ShortcutIdentifier.Fourth:
        Console.WriteLine ("Forth shortcut selected");
        handled = true;
        break;
    }

    // Return results
    return handled;
}

public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)
{
    var shouldPerformAdditionalDelegateHandling = true;

    // Get possible shortcut item
    if (launchOptions != null) {
        LaunchedShortcutItem = launchOptions [UIApplication.LaunchOptionsShortcutItemKey] as UIApplicationShortcutItem;
        shouldPerformAdditionalDelegateHandling = (LaunchedShortcutItem == null);
    }

    return shouldPerformAdditionalDelegateHandling;
}

public override void OnActivated (UIApplication application)
{
    // Handle any shortcut item being selected
    HandleShortcutItem(LaunchedShortcutItem);

    // Clear shortcut after it's been handled
    LaunchedShortcutItem = null;
}

public override void PerformActionForShortcutItem (UIApplication application, UIApplicationShortcutItem shortcutItem, UIOperationHandler completionHandler)
{
    // Perform action
    completionHandler(HandleShortcutItem(shortcutItem));
}

En primer lugar, se define una propiedad LaunchedShortcutItem pública para realizar el seguimiento del último elemento de acción rápida seleccionado por el usuario.First, we define a public LaunchedShortcutItem property to track the last selected Quick Action item by the user. A continuación, se invalida el método de FinishedLaunching y se muestra si se han pasado launchOptions y si contienen un elemento de acción rápida.Then, we override the FinishedLaunching method and see if launchOptions have been passed and if they contains a Quick Action item. Si lo hacen, se almacena la acción rápida en la propiedad LaunchedShortcutItem.If they do, we store the Quick Action in the LaunchedShortcutItem property.

Después, invalide el método OnActivated y pase cualquier elemento de inicio rápido seleccionado al método HandleShortcutItem en el que se va a actuar.Next, we override the OnActivated method and pass any selected Quick Launch item to the HandleShortcutItem method to be acted on. Actualmente solo estamos escribiendo un mensaje en la consola.Currently we are only writing a message to the Console. En una aplicación real, podría controlar qué acción fue necesaria.In a real app, you'd handle what ever action was required. Una vez realizada la acción, se borra la propiedad LaunchedShortcutItem.After the action has been taken, the LaunchedShortcutItem property is cleared.

Por último, si la aplicación ya se estaba ejecutando, se llamará al método PerformActionForShortcutItem para administrar el elemento de acción rápida, por lo que necesitamos invalidarlo y llamar al método de HandleShortcutItem aquí también.Finally, if your app was already running, the PerformActionForShortcutItem method would be called to handle the Quick Action item so we need to override it and call our HandleShortcutItem method here as well.

Crear elementos de acción rápida dinámicaCreating Dynamic Quick Action Items

Además de definir elementos de acción rápida estáticos en el archivo de Info.plist de la aplicación, puede crear acciones rápidas dinámicas sobre la marcha.In addition to defining static Quick Action items in your app's Info.plist file, you can create dynamic on-the-fly Quick Actions. Para definir dos nuevas acciones rápidas dinámicas, edite el archivo de AppDelegate.cs de nuevo y modifique el método FinishedLaunching para que tenga un aspecto similar al siguiente:To define two new dynamic Quick Actions, edit your AppDelegate.cs file again and modify the FinishedLaunching method to look like the following:

public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)
{
    var shouldPerformAdditionalDelegateHandling = true;

    // Get possible shortcut item
    if (launchOptions != null) {
        LaunchedShortcutItem = launchOptions [UIApplication.LaunchOptionsShortcutItemKey] as UIApplicationShortcutItem;
        shouldPerformAdditionalDelegateHandling = (LaunchedShortcutItem == null);
    }

    // Add dynamic shortcut items
    if (application.ShortcutItems.Length == 0) {
        var shortcut3 = new UIMutableApplicationShortcutItem (ShortcutIdentifier.Third, "Play") {
            LocalizedSubtitle = "Will play an item",
            Icon = UIApplicationShortcutIcon.FromType(UIApplicationShortcutIconType.Play)
        };

        var shortcut4 = new UIMutableApplicationShortcutItem (ShortcutIdentifier.Fourth, "Pause") {
            LocalizedSubtitle = "Will pause an item",
            Icon = UIApplicationShortcutIcon.FromType(UIApplicationShortcutIconType.Pause)
        };

        // Update the application providing the initial 'dynamic' shortcut items.
        application.ShortcutItems = new UIApplicationShortcutItem[]{shortcut3, shortcut4};
    }

    return shouldPerformAdditionalDelegateHandling;
}

Ahora estamos comprobando si el application ya contiene un conjunto de ShortcutItemscreados dinámicamente, si no vamos a crear dos nuevos objetos de UIMutableApplicationShortcutItem para definir los nuevos elementos y agregarlos a la matriz de ShortcutItems.Now we are checking to see if the application already contains a set of dynamically created ShortcutItems, if it doesn't we'll create two new UIMutableApplicationShortcutItem objects to define the new items and add them to the ShortcutItems array.

El código que ya hemos agregado en la sección control de una acción rápida anterior controlará estas acciones rápidas dinámicas, al igual que las estáticas.The code we already added in the Handling a Quick Action section above will handle these dynamic Quick Actions just like the static ones.

Debe tenerse en contada que puede crear una mezcla de elementos de acción rápida estáticos y dinámicos (como hacemos aquí), no está limitado a uno u otro.It should be noted that you can create a mixture of both static and dynamic Quick Action items (as we are doing here), you are not limited to one or the other.

Para obtener más información, consulte el ejemplo de ViewControllerPreview de iOS 9 y vea ApplicationShortcuts de Apple : uso de la aplicación de ejemplo UIApplicationShortcutItem, referencia de clase UIApplicationShortcutItem, Referencia de la clase UIMutableApplicationShortcutItem y referencia de clase UIApplicationShortcutIcon.For more information, please our iOS 9 ViewControllerPreview Sample and see Apple's ApplicationShortcuts: Using UIApplicationShortcutItem sample app, UIApplicationShortcutItem Class Reference, UIMutableApplicationShortcutItem Class Reference and UIApplicationShortcutIcon Class Reference.

Probar la función táctil 3D en el simuladorTesting 3D Touch in the Simulator

Al usar la versión más reciente de Xcode y el simulador de iOS en un equipo Mac compatible con una Force Touch habilitar el control de pantalla, puede probar la funcionalidad táctil 3D en el simulador.When using the latest version of Xcode and the iOS Simulator on a compatible Mac with a Force Touch enable trackpad, you can test 3D Touch functionality in Simulator.

Para habilitar esta funcionalidad, ejecute cualquier aplicación en hardware de iPhone simulado que admita el toque 3D (iPhone 6S y versiones posteriores).To enable this functionality, run any app in simulated iPhone hardware that supports 3D Touch (iPhone 6s and greater). A continuación, seleccione el menú de hardware en el simulador de iOS y habilite el elemento de menú usar el fuerza de pantalla para el toque 3D :Next, select the Hardware menu in the iOS Simulator and enable the Use Trackpad Force for 3D touch menu item:

Con esta característica activa, puede presionar más fuerte en el toques del equipo Mac para habilitar la función táctil 3D, al igual que haría en el hardware de iPhone real.With this feature active, you can press harder on the Mac's trackpad to enable 3D Touch just like you would on real iPhone hardware.

ResumenSummary

En este artículo se han incorporado las nuevas API táctiles 3D que están disponibles en iOS 9 para iPhone 6S y iPhone 6S Plus.This article has introduced the new 3D Touch APIs made available in iOS 9 for the iPhone 6s and iPhone 6s Plus. Se ha tratado la adición de sensibilidad a la presión a una aplicación; usar PEEK y pop para mostrar rápidamente información de la aplicación desde el contexto actual sin navegación; y el uso de acciones rápidas para proporcionar accesos directos a las características de uso más frecuente de la aplicación.It covered adding Pressure Sensitivity to an app; using Peek and Pop to quickly display in-app information from the current context without navigation; and using Quick Actions to provide shortcuts to your app's most commonly used features.