Pengantar Sentuhan 3D di Xamarin.iOS
Artikel ini membahas penggunaan gerakan iPhone 6s dan iPhone 6s Plus 3D Touch baru di aplikasi Anda.
Artikel ini akan menyediakan dan memperkenalkan penggunaan 3D Touch API baru untuk menambahkan gerakan sensitif tekanan ke aplikasi Xamarin.iOS yang berjalan di perangkat iPhone 6s dan iPhone 6s Plus baru.
Dengan 3D Touch, aplikasi iPhone sekarang dapat tidak hanya memberi tahu bahwa pengguna menyentuh layar perangkat, tetapi dapat merasakan berapa banyak tekanan yang dialami pengguna dan merespons tingkat tekanan yang berbeda.
3D Touch menyediakan fitur berikut untuk aplikasi Anda:
- Sensitivitas Tekanan - Aplikasi sekarang dapat mengukur seberapa keras atau ringan pengguna menyentuh layar dan memanfaatkan informasi tersebut. Misalnya, aplikasi lukisan dapat membuat garis lebih tebal atau lebih tipis berdasarkan seberapa keras pengguna menyentuh layar.
- Intip dan Pop - Aplikasi Anda sekarang dapat memungkinkan pengguna berinteraksi dengan datanya tanpa harus menavigasi keluar dari konteks mereka saat ini. Dengan menekan keras layar layar, mereka dapat mengintip item yang mereka minati (seperti mempratinjau pesan). Dengan menekan lebih keras, mereka dapat muncul ke dalam item.
- Tindakan Cepat - Pikirkan Tindakan Cepat seperti menu kontekstual yang dapat dimunculkan saat pengguna mengklik kanan item di aplikasi desktop. Dengan menggunakan Tindakan Cepat, Anda dapat menambahkan pintasan ke fungsi di aplikasi langsung dari ikon aplikasi di layar Beranda.
- Menguji 3D Touch di Simulator - Dengan perangkat keras Mac yang benar, Anda dapat menguji aplikasi yang diaktifkan 3D Touch di Simulator iOS.
Sensitivitas Tekanan
Seperti yang dinyatakan di atas, dengan menggunakan properti baru kelas UITouch , Anda dapat mengukur jumlah tekanan yang diterapkan pengguna ke layar perangkat iOS dan menggunakan informasi ini di antarmuka pengguna Anda. Misalnya, membuat goresan kuas lebih tembus atau buram berdasarkan jumlah tekanan.
Sebagai hasil dari 3D Touch, jika aplikasi Anda berjalan di iOS 9 (atau lebih besar) dan perangkat iOS mampu mendukung 3D Touch, perubahan tekanan akan menyebabkan TouchesMoved
peristiwa dinaikkan.
Misalnya, saat memantau TouchesMoved
peristiwa UIView, Anda dapat menggunakan kode berikut untuk mendapatkan tekanan saat ini yang diterapkan pengguna ke layar:
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
...
}
}
Properti MaximumPossibleForce
mengembalikan nilai setingkat mungkin untuk Force
properti UITouch berdasarkan perangkat iOS tempat aplikasi berjalan.
Penting
Perubahan tekanan akan menyebabkan TouchesMoved
peristiwa dinaikkan, bahkan jika koordinat X/Y tidak berubah. Karena perubahan perilaku ini, aplikasi iOS Anda harus disiapkan agar TouchesMoved
peristiwa dipanggil lebih sering dan agar koordinat X/Y sama dengan panggilan terakhir TouchesMoved
.
Untuk informasi selengkapnya, silakan lihat TouchCanvas Apple : Menggunakan UITouch secara efisien dan efektif sampel aplikasi dan Referensi Kelas UITouch.
Intip dan Pop
3D Touch menyediakan cara baru bagi pengguna untuk berinteraksi dengan informasi dalam aplikasi Anda lebih cepat dari sebelumnya, tanpa harus menavigasi dari lokasi mereka saat ini.
Misalnya, jika aplikasi Anda menampilkan tabel pesan, pengguna dapat menekan keras item untuk mempratinjau kontennya dalam tampilan overlay (yang disebut Apple sebagai Intip).
Jika pengguna menekan lebih keras, mereka akan memasukkan tampilan pesan reguler (yang disebut sebagai Pop-ping ke dalam tampilan).
Memeriksa Ketersediaan Sentuh 3D
Saat bekerja dengan Anda UIViewController
dapat menggunakan kode berikut untuk melihat apakah perangkat iOS yang dijalankan aplikasi mendukung 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);
...
Metode ini dapat dipanggil sebelum atau sesudah ViewDidLoad()
.
Menangani Intip dan Pop
Pada perangkat iOS yang dapat menangani 3D Touch, kita dapat menggunakan instans UIViewControllerPreviewingDelegate
kelas untuk menangani tampilan detail item Intip dan Pop . Misalnya, jika kita memiliki Pengontrol Tampilan Tabel yang disebut MasterViewController
, kita dapat menggunakan kode berikut untuk mendukung Intip dan 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
}
}
Metode GetViewControllerForPreview
ini digunakan untuk melakukan operasi Intip . Ini mendapatkan akses ke sel tabel dan data cadangan lalu memuat DetailViewController
dari Storyboard saat ini. Dengan mengatur PreferredContentSize
ke (0,0) kami meminta ukuran tampilan Intip default. Akhirnya, kami mengaburkan semuanya tetapi sel yang ditampilkan dengan previewingContext.SourceRect = cell.Frame
dan kami mengembalikan tampilan baru untuk ditampilkan.
Menggunakan CommitViewController
kembali tampilan yang kami buat di tampilan Intip untuk Pop saat pengguna menekan lebih keras.
Mendaftar untuk Mengintip dan Pop
Dari Pengontrol Tampilan yang ingin kami izinkan pengguna untuk mengintip dan Memunculkan item dari, kita perlu mendaftar untuk layanan ini. Dalam contoh yang diberikan di atas Pengontrol Tampilan Tabel (MasterViewController
), kita akan menggunakan kode berikut:
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);
}
...
}
Di sini kita memanggil RegisterForPreviewingWithDelegate
metode dengan instans yang kita buat di PreviewingDelegate
atas. Di perangkat iOS yang mendukung 3D Touch, pengguna dapat menekan keras item untuk Mengintipnya. Jika mereka menekan lebih keras, item akan Muncul ke dalam tampilan tampilan standar.
Untuk informasi selengkapnya, lihat ViewControllerPreviews Apple: Menggunakan aplikasi sampel API pratinjau UIViewController, Referensi Kelas UIPreviewAction, Referensi Kelas UIPreviewActionGroup, dan Referensi Protokol UIPreviewActionItem.
Tindakan Cepat
Dengan menggunakan 3D Touch and Quick Actions, Anda dapat menambahkan pintasan umum, cepat, dan mudah diakses ke fungsi di aplikasi Anda dari ikon layar Utama di perangkat iOS.
Seperti yang dinyatakan di atas, Anda dapat memikirkan Tindakan Cepat seperti menu kontekstual yang dapat dimunculkan saat pengguna mengklik kanan item di aplikasi desktop. Anda harus menggunakan Tindakan Cepat untuk menyediakan pintasan ke fungsi atau fitur paling umum dari aplikasi Anda.
Menentukan Tindakan Cepat Statis
Jika satu atau beberapa Tindakan Cepat yang diperlukan oleh aplikasi Anda statis dan tidak perlu diubah, Anda dapat menentukannya dalam file aplikasi Info.plist
. Edit file ini di editor eksternal dan tambahkan kunci berikut:
<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>
Di sini kita menentukan dua item Tindakan Cepat statis dengan kunci berikut:
UIApplicationShortcutItemIconType
- Menentukan ikon yang akan ditampilkan oleh item Tindakan Cepat sebagai salah satu nilai berikut: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
- Mendefinisikan subtitel untuk item.UIApplicationShortcutItemTitle
- Mendefinisikan judul untuk item.UIApplicationShortcutItemType
- Adalah nilai string yang akan kita gunakan untuk mengidentifikasi item di aplikasi kita. Lihat bagian berikut untuk informasi selengkapnya.
Penting
Item pintasan Tindakan Cepat yang diatur dalam Info.plist
file tidak dapat diakses dengan Application.ShortcutItems
properti . Mereka hanya diteruskan ke penanganan HandleShortcutItem
aktivitas.
Mengidentifikasi Item Tindakan Cepat
Seperti yang Anda lihat di atas, saat menentukan item Tindakan Cepat di aplikasi Info.plist
, Anda menetapkan nilai string ke UIApplicationShortcutItemType
kunci untuk mengidentifikasinya.
Untuk membuat pengidentifikasi tersebut lebih mudah dikerjakan dalam kode, tambahkan kelas yang dipanggil ShortcutIdentifier
ke proyek aplikasi Anda dan buat terlihat seperti berikut:
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";
}
}
Menangani Tindakan Cepat
Selanjutnya, Anda perlu mengubah file aplikasi AppDelegate.cs
untuk menangani pengguna yang memilih item Tindakan Cepat dari ikon aplikasi Anda di layar Beranda.
Lakukan pengeditan berikut:
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));
}
Pertama, kami menentukan properti publik LaunchedShortcutItem
untuk melacak item Tindakan Cepat terakhir yang dipilih oleh pengguna. Kemudian, kita mengambil alih FinishedLaunching
metode dan melihat apakah launchOptions
telah diteruskan dan apakah mereka berisi item Tindakan Cepat. Jika mereka melakukannya, kami menyimpan Tindakan Cepat di LaunchedShortcutItem
properti .
Selanjutnya, kita mengambil alih OnActivated
metode dan meneruskan item Luncur Cepat yang dipilih ke metode yang HandleShortcutItem
akan ditindaklanjuti. Saat ini kami hanya menulis pesan ke Konsol. Dalam aplikasi nyata, Anda akan menangani tindakan apa pun yang diperlukan. Setelah tindakan diambil, LaunchedShortcutItem
properti dibersihkan.
Terakhir, jika aplikasi Anda sudah berjalan, PerformActionForShortcutItem
metode akan dipanggil untuk menangani item Tindakan Cepat sehingga kita perlu mengambil alihnya dan memanggil metode kami HandleShortcutItem
di sini juga.
Membuat Item Tindakan Cepat Dinamis
Selain menentukan item Tindakan Cepat statis dalam file aplikasi Info.plist
, Anda dapat membuat Tindakan Cepat dinamis saat terbang. Untuk menentukan dua Tindakan Cepat dinamis baru, edit file Anda AppDelegate.cs
lagi dan ubah FinishedLaunching
metode agar terlihat seperti berikut ini:
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;
}
Sekarang kita sedang memeriksa untuk melihat apakah application
sudah berisi sekumpulan yang dibuat ShortcutItems
secara dinamis , jika tidak kita akan membuat dua objek baru UIMutableApplicationShortcutItem
untuk menentukan item baru dan menambahkannya ke ShortcutItems
array.
Kode yang sudah kami tambahkan di bagian Menangani Tindakan Cepat di atas akan menangani Tindakan Cepat dinamis ini seperti yang statis.
Perlu dicatat bahwa Anda dapat membuat campuran item Tindakan Cepat statis dan dinamis (seperti yang kami lakukan di sini), Anda tidak terbatas pada satu atau yang lain.
Untuk informasi selengkapnya, silakan lihat ApplicationShortcuts Apple: Menggunakan aplikasi sampel UIApplicationShortcutItem, Referensi Kelas UIApplicationShortcutItem, Referensi Kelas UIMutableApplicationShortcutItem dan Referensi Kelas UIApplicationShortcutIcon.
Menguji Sentuhan 3D di Simulator
Saat menggunakan versi terbaru Xcode dan iOS Simulator pada Mac yang kompatibel dengan trackpad yang diaktifkan Force Touch, Anda dapat menguji fungsionalitas 3D Touch di Simulator.
Untuk mengaktifkan fungsionalitas ini, jalankan aplikasi apa pun di perangkat keras iPhone simulasi yang mendukung 3D Touch (iPhone 6s dan yang lebih besar). Selanjutnya, pilih menu Perangkat Keras di Simulator iOS dan aktifkan item menu Gunakan Gaya Trackpad untuk sentuhan 3D:
Dengan fitur ini aktif, Anda dapat menekan lebih keras pada trackpad Mac untuk mengaktifkan 3D Touch seperti yang Anda lakukan pada perangkat keras iPhone nyata.
Ringkasan
Artikel ini telah memperkenalkan 3D Touch API baru yang tersedia di iOS 9 untuk iPhone 6s dan iPhone 6s Plus. Ini mencakup penambahan Sensitivitas Tekanan ke aplikasi; menggunakan Intip dan Pop untuk menampilkan informasi dalam aplikasi dengan cepat dari konteks saat ini tanpa navigasi; dan menggunakan Tindakan Cepat untuk menyediakan pintasan ke fitur aplikasi anda yang paling umum digunakan.