Xamarin. iOS 'da 3D Touch 'a giriş

bu makalede, uygulamanızda yeni iPhone 6s ve iPhone 6s Plus ve 3b dokunma hareketleri kullanımı ele alınmaktadır.

3D dokunma etkin uygulamalar örnekleri

bu makale yeni iPhone 6s ve iPhone 6s Plus cihazlarda çalışan Xamarin. iOS uygulamalarınıza basınca duyarlı hareketleri eklemek için yeni 3b dokunma apı 'lerini kullanmaya ve bunlara giriş yapmanızı sağlayacak.

3b dokunma sayesinde, iPhone bir uygulama artık kullanıcının cihazın ekranına dokunmasına, ancak kullanıcının farklı basınç düzeylerine ne kadar basınç verdiğini ve yanıt vereceğini anlayabilmesini sağlayabiliyor.

3D dokunma, uygulamanız için aşağıdaki özellikleri sağlar:

  • Basınç duyarlılığı -uygulamalar artık kullanıcının ekrana dokunmasına ne kadar zor veya hafif olduğunu ölçebilir ve bu bilgilerden yararlanın. Örneğin, bir boyama uygulaması, kullanıcının ekrana ne kadar dokunduğunda bir çizgiyi daha kalın veya bir şekilde belirleyebilir.
  • Göz atın ve açılır pencere artık, kullanıcının geçerli bağlamından gezinmek zorunda kalmadan verileriyle etkileşime girmesine izin verebilir. Ekranda ekranın ekranda sabit 'e basılarak, ilgilendikleri öğeye göz atma (bir iletiyi önizlemek gibi). Daha zor bir tuşa basarak öğe içine eklenebilir.
  • Hızlı eylemler -bir kullanıcı masaüstü uygulamasındaki bir öğeye sağ tıkladığında, bağlamsal menüler gibi hızlı eylemleri düşünün. Hızlı eylemleri kullanarak uygulamanızdaki işlevlere kısayollar ekleyerek doğrudan giriş ekranındaki uygulama simgesinden erişebilirsiniz.
  • 3B Touch 'ı Benzetici 'de test etme -doğru Mac donanımı Ile IOS simülatörü 'Nda 3B dokunma özellikli uygulamaları test edebilirsiniz.

Basınç duyarlılığı

Yukarıda belirtildiği gibi, Uıtouch sınıfının yeni özellikleri kullanılarak, kullanıcının iOS cihazının ekranına uygulama yaptığı basınç miktarını ölçebilir ve bu bilgileri Kullanıcı arabiriminizdeki ' de kullanabilirsiniz. Örneğin, bir fırça darbesini, basınç miktarına göre yarı saydam veya donuk hale getirme.

Basınç miktarına göre yarı saydam veya donuk olarak işlenen bir fırça darbesi

3D Touch 'un bir sonucu olarak, uygulamanız iOS 9 (veya üzeri) üzerinde çalışıyorsa ve iOS cihazı 3B Touch 'ı destekliyorsanız, basıncının değişiklikleri etkinliğin oluşturulmasına neden olur TouchesMoved .

Örneğin, TouchesMoved bir TouchesMovedolayını izlerken, kullanıcının ekrana uygulamanın geçerli basıncını almak için aşağıdaki kodu kullanabilirsiniz:

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
        ...
    }
}

MaximumPossibleForceÖzelliği, Force uygulamanın üzerinde çalıştığı iOS cihazına göre MaximumPossibleForce özelliği için mümkün olan en yüksek değeri döndürür.

Önemli

Basınç değişiklikleri TouchesMoved , X/Y koordinatları değiştirilmese bile olayın oluşturulmasına neden olur. Bu davranış değişikliği nedeniyle, iOS uygulamalarınızın TouchesMoved etkinliğin daha sık çağrılması ve X/Y koordinatlarının son çağrıyla aynı olması için hazır olması gerekir TouchesMoved .

Daha fazla bilgi için bkz. Apple 'ın TouchCanvas: Uıtouch etkin ve etkin şekilde örnek uygulama ve Uıtouch sınıf başvurusukullanma.

Göz at ve pop

3B dokunma, bir kullanıcının geçerli konumlarından gezinmek zorunda kalmadan uygulamanızdaki bilgilerle daha hızlı etkileşim kurması için yeni yollar sağlar.

Örneğin, uygulamanız bir ileti tablosu görüntülüyor ise, Kullanıcı bir öğeyi bir kaplama görünümünde (Apple 'ın bir göz atmaolarak ifade ettiği) önizlemek için bir öğe üzerinde sabit bir görünüme sahip olabilir.

İçeriğe göz atma örneği

Kullanıcı daha zor bir tuşa basarsa, normal ileti görünümüne (görünüme açılanping olarak adlandırılır) girer.

3D dokunma kullanılabilirliği denetleniyor

İle çalışırken, UIViewController uygulamanın çalışmakta olduğu iOS cihazının 3D Touch 'ı destekleyip desteklemediğini görmek için aşağıdaki kodu kullanabilirsiniz:

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);
        ...

Bu yöntem, veya sonrasındaçağrılabilir .

Özeti işleme ve pop

3D Touch 'ı işleyebilen bir iOS cihazında, UIViewControllerPreviewingDelegateUIViewControllerPreviewingDelegate ve pop öğesi ayrıntılarının görüntülenmesini işlemek için sınıfının bir örneğini kullanabiliriz. Örneğin, adında bir tablo görünümü denetleyicisi olsaydı, MasterViewControllerMasterViewController ve pop'u desteklemek için aşağıdaki kodu kullanabiliriz:

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
    }
}

GetViewControllerForPreviewYöntemi, GetViewControllerForPreview işlemini gerçekleştirmek için kullanılır. Tablo hücresine erişim sağlar ve verileri yedekleyip DetailViewController geçerli film şeridinde yükler. PreferredContentSize' I (0, 0) ayarlayarak varsayılan PreferredContentSize görünümü boyutunu soruyoruz. Son olarak, görüntülediğimiz hücreden her şeyi bulanıklaştırıyoruz previewingContext.SourceRect = cell.Frame ve yeni görünümü görüntüleme için döndürtik.

, CommitViewController Kullanıcı daha zor olduğunda pop görünümü için CommitViewController bölümünde oluşturduğumuz görünümü yeniden kullanır.

Göz atma ve pop için kaydolma

Kullanıcının öğesinden öğeleregöz atma ve öğe eklemesine Izin vermek istediğimiz görünüm denetleyicisinden, bu hizmete kaydolduk. Bir tablo görünümü denetleyicisi () yukarıda verilen örnekte MasterViewController aşağıdaki kodu kullanacağız:

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);
    }
    ...

}

Burada, RegisterForPreviewingWithDelegate yukarıda oluşturduğumuz bir örneğiyle yöntemi arıyoruz PreviewingDelegate . 3D Touch 'ı destekleyen iOS cihazlarda, Kullanıcı göz atmayı sağlamak için bir öğe üzerinde sabit ' e basabilir. Daha da zor olursa öğe, standart görüntü görünümüne açılır.

Daha fazla bilgi için bkz. iOS 9 Applicationkýsayollar ve Apple viewcontrollerpreview: UIViewController API 'leri önizleme örnek uygulaması, uıpreview ACTION Class Reference, Uıpreview ActionGroup Class Reference ve uıpreview actionıtem protokol başvurusu.

Hızlı Eylemler

3B dokunma ve hızlı eylemleri kullanarak, iOS cihazındaki giriş ekranı simgesinden uygulamanızdaki işlevlere genel, hızlı ve kolay erişim kısayolları ekleyebilirsiniz.

Yukarıda belirtildiği gibi, bir kullanıcı masaüstü uygulamasındaki bir öğeye sağ tıkladığı zaman, bağlamsal menüler gibi hızlı eylemleri düşünebilirsiniz. Uygulamanızın en yaygın işlevlerine veya özelliklerine kısayollar sağlamak için hızlı eylemler kullanmanız gerekir.

Hızlı Eylemler menüsüne bir örnek

Statik hızlı eylemleri tanımlama

Uygulamanız için gereken bir veya daha fazla hızlı eylem statikse ve değiştirilmesi gerekmiyorsa, bunları uygulamanın Info.plist dosyasında tanımlayabilirsiniz. Bu dosyayı bir dış düzenleyicide düzenleyin ve aşağıdaki anahtarları ekleyin:

<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>

Burada, aşağıdaki anahtarlarla iki statik hızlı eylem öğesi tanımlanıyoruz:

  • UIApplicationShortcutItemIconType -Hızlı eylem öğesi tarafından aşağıdaki değerlerden biri olarak görüntülenecek simgeyi tanımlar:

    • 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

    Uıapplicationshortcuticontentype canlandırın

  • UIApplicationShortcutItemSubtitle -Öğenin alt başlığını tanımlar.

  • UIApplicationShortcutItemTitle -Öğenin başlığını tanımlar.

  • UIApplicationShortcutItemType -Uygulamamızda öğeyi tanımlamak için kullanabilmemiz gereken bir dize değeridir. Daha fazla bilgi için aşağıdaki bölüme bakın.

Önemli

Dosyasında ayarlanan hızlı eylem kısayol öğelerine Info.plist özelliği ile erişilemez Application.ShortcutItems . Bunlar yalnızca HandleShortcutItem olay işleyicisine geçirilir.

Hızlı eylem öğelerini tanımlama

Yukarıda gördüğünüz gibi, uygulamanızda hızlı eylem öğelerinizi tanımladığınızda Info.plist , UIApplicationShortcutItemType bunları tanımlamak için anahtara bir dize değeri atamış olursunuz.

Bu tanımlayıcıların kod içinde ile çalışmasını kolaylaştırmak için uygulamanızın projesine adlı bir sınıf ekleyin ShortcutIdentifier ve aşağıdaki gibi görünmesini sağlayın:

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";
    }
}

Hızlı eylemi işleme

Daha sonra, uygulamanın AppDelegate.cs Giriş ekranında uygulamanızın simgesinden bir hızlı eylem öğesi seçmesini sağlamak için uygulamanızın dosyasını değiştirmeniz gerekir.

Aşağıdaki düzenlemeleri yapın:

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));
}

İlk olarak, LaunchedShortcutItem Kullanıcı tarafından seçilen son hızlı eylem öğesini izlemek için ortak bir özellik tanımladık. Sonra, yöntemi geçersiz kıldık FinishedLaunching ve başarılı olup olmadığını launchOptions ve bir hızlı eylem öğesi içerip içerdiğini görürsünüz. Bu durumda, hızlı eylemi özelliğinde depolarız LaunchedShortcutItem .

Sonra, yöntemi geçersiz kıldık OnActivated ve seçili bir hızlı başlatma öğesini, üzerinde işlem yapılacak yönteme geçiririz HandleShortcutItem . Şu anda yalnızca konsolabir ileti yazıyoruz. Gerçek bir uygulamada, herhangi bir eylemin gerekli olduğunu işleyirsiniz. Eylem alındıktan sonra LaunchedShortcutItem özellik temizlenir.

Son olarak, uygulamanız zaten çalışıyorsa, PerformActionForShortcutItem bunu geçersiz kılmamız ve yöntemizi burada çağırmak Için hızlı eylem öğesini işlemek üzere yöntemi çağrılır HandleShortcutItem .

Dinamik hızlı eylem öğeleri oluşturma

Uygulamanızın dosyasında statik hızlı eylem öğelerini tanımlamaya ek olarak Info.plist , dinamik ve hızlı eylemler oluşturabilirsiniz. İki yeni dinamik hızlı eylem tanımlamak için AppDelegate.cs dosyanızı yeniden düzenleyin ve FinishedLaunching aşağıdaki gibi görünmesi için yöntemi değiştirin:

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;
}

Şimdi, applicationShortcutItemsUIMutableApplicationShortcutItem Yeni öğeleri tanımlamak ve diziye eklemek için iki yeni nesne oluşturduğumuz takdirde, zaten dinamik olarak oluşturulan bir küme olup olmadığını denetliyoruz ShortcutItems .

Yukarıdaki hızlı eylemi işleme bölümünde zaten eklediğimiz kod, statik olanlar gibi bu dinamik hızlı eylemleri işleyeceğiz.

Hem statik hem de dinamik hızlı eylem öğelerinin bir karışımını oluşturabileceğiniz (burada yaptığımız gibi), bir veya diğer ile sınırlı olmamak üzere not edilmelidir.

Daha fazla bilgi için bkz. iOS 9 ViewControllerPreview örneğiniz ve Apple 'ın Applicationkýsayollar: uıapplicationshortcutıtem örnek uygulaması, uıapplicationshortcutıtem Class Reference, uııuıtableapplicationshortcutıtem Class Reference ve UIApplicationShortcutIcon Class Reference.

Simülatör 'da 3D Touch test etme

Force Touch Enable tekerleksiz ile uyumlu bir Mac 'te Xcode 'un en son sürümünü ve iOS simülatörünü kullanırken, 3B dokunma işlevlerini benzeticide test edebilirsiniz.

bu işlevi etkinleştirmek için, 3b Touch (iPhone 6s ve üzeri) destekleyen sanal iPhone donanımlarda herhangi bir uygulamayı çalıştırın. Ardından, iOS simülatörü ' nde donanım menüsünü seçin ve 3B dokunma Için tekerleksiz zorla kullan menü öğesini etkinleştirin:

İOS simülatörü ' nde donanım menüsünü seçin ve 3B dokunma için tekerleksiz zorla kullan menü öğesini etkinleştirin

bu özellik etkinken, gerçek iPhone donanımlarda olduğu gibi 3d dokunmayı etkinleştirmek için Mac 'in tekerleksiz daha zor bir şekilde basabilirsiniz.

Özet

bu makalede, iPhone 6s ve iPhone 6s Plus için iOS 9 ' da sunulan yeni 3b dokunma apı 'leri tanıtılmıştır. Bir uygulamaya basınç duyarlılığı ekleme ele alınmıştır; Gezinti olmadan geçerli bağlamdan uygulama içi bilgileri hızlıca göstermek için Peek ve pop kullanımı. ve uygulamanızın en sık kullanılan özelliklerine kısayollar sağlamak için hızlı eylemler kullanma.