1. 3DTouch の概要
3DTouch は、追加の機能にアクセスするために画面にさまざまな程度の圧力を加えることを指します。アプリケーションでは、メニューの表示、その他のコンテンツの表示、アニメーションの再生などにより 3D Touch を表示できます (6s 以降のモデルからサポートされています)。
3DTouch には主に 3 つの表現形式があります。
1. ホーム画面の操作
2. ピークアンドポップ
3、ライブフォト
ここでは最初の 2 つだけを紹介します
2. ホーム画面の操作
ホーム画面のインタラクションでは、携帯電話のデスクトップ上のアプリケーション アイコンをクリックするときに一定の圧力を加えます。図に示すように、ショートカット キー ボタンのリストが適切な場所に表示されます。
3DTouch ホーム画面のインタラクション効果.png
ホーム画面にインタラクティブなショートカット ボタンを追加するには 2 つの方法があります。
1. 静的加算
2. 動的追加
静的に追加する
この方法では主に、以下に示すように、対応する属性をプロジェクトの info.plist ファイルに追加します。
ショートカットボタンを静的に追加.png
UIApplicationShortcutItem: ホーム画面の操作ショートカット ボタンのタイプ
UIApplicationShortcutItemIconFile: ホーム画面の操作で使用されるボタンのカスタム画像名 (オプション)
UIApplicationShortcutItemTitle: ホーム画面の操作で使用されるボタン名 (必須)
UIApplicationShortcutItemType:ホーム画面の操作で使用されるボタンの一意の識別子。どのショートカット ボタンがクリックされたかを判断するために使用されます (必須)
UIApplicationShortcutItemSubtitle: ショートカット選択可能な項目のサブタイトル (オプション)
UIApplicationShortcutItemIconType: ショートカット オプションのアイコン (オプション)
UIApplicationShortcutItemUserInfo: ショートカット オプションの追加情報 (オプション)
動的に追加
動的追加とは、shortcutItmes オブジェクト配列をコードの形式で UIApplication シングルトン オブジェクトに渡すことを意味します。shortcutItems オブジェクトを初期化する手順は、アプリの起動メソッドで実行できます。
- (BOOL)application:(UIApplication*)application DidFinishLaunchingWithOptions:(NSDictionary*)launchOptions
ShortcutItem オブジェクトを初期化するサンプル コード:
//ライブブロードキャストを開始します
UIApplicationShortcutIcon *liveIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@"3d_touch_live"];
UIApplicationShortcutItem *liveItem = [[UIApplicationShortcutItem alloc] initWithType:@"com.startLive" localizedTitle:@"开始直播" localizedSubtitle:nil icon:liveIcon userInfo:nil];
//私信
UIApplicationShortcutIcon *messageIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@"3d_touch_message"];
UIApplicationShortcutItem *messageItem = [[UIApplicationShortcutItem alloc] initWithType:@"com.message" localizedTitle:@"私信" localizedSubtitle:nil icon:messageIcon userInfo:nil];
//フォロー
UIApplicationShortcutIcon *followIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@"3d_touch_live"];
UIApplicationShortcutItem*followItem = [[UIApplicationShortcutItemalloc]initWithType:@"com.follow"localizedTitle:@"关注目の人"localizedSubtitle:nilicon:followIcon userInfo:nil];
[[UIApplicationsharedApplication]setShortcutItems:@[liveItem,messageItem,followItem]];
インスタンスメソッド:
- (インスタンスタイプ)initWithType:(NSString*)type localizedTitle:(NSString*)localizedTitle localizedSubtitle:(nullableNSString*)localizedSubtitle icon:(nullableUIApplicationShortcutIcon*)icon userInfo:(nullableNSDictionary*)userInfo
type:ホーム画面の操作で使用されるボタンの一意の識別子。どのショートカット ボタンがクリックされたかを判断するために使用されます (必須)
localizedTitle: ホーム画面の操作で使用されるボタン名 (必須)
localizedSubtitle: ショートカット オプションのサブタイトル (オプション)
icon: ホーム画面の操作で使用されるボタン画像名 (オプション)
userInfo: ショートカット オプションの追加情報 (オプション)
システムのアイコンインスタンスメソッドを使用する
+ (インスタンスタイプ)iconWithType:(UIApplicationShortcutIconType)タイプ
カスタムアイコンインスタンスメソッドを使用する
+ (インスタンスタイプ)iconWithTemplateImageName:(NSString*)templateImageName
ホーム画面のインタラクション ボタンのクリック イベントをリッスンする
- (void)application:(UIApplication*)application PerformActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItem completedHandler:(void(^)(BOOL))completionHandler
shortcutItem.type はボタンの一意の識別子です。どのボタンをクリックしたかを知ることができ、対応するイベント処理をここで実行できます。
3. ピークアンドポップ
操作に関しては、ピーク アンド ポップとは、ユーザーが携帯電話の画面上でプレビューしたいオプションの位置を強く押すことを意味し、プレビュー ウィンドウがポップアップして 2 ページ目をプレビューできるようになります。操作オプションは、sheetAlertView と同様の方法で設定および表示できます。上記のレンダリング:
1. ListView ビュー コントローラーのプロトコル <UIViewControllerPreviewingDelegate> に準拠します。
2. ListViewビューコントローラーに3DTouchを登録する
//プログラムのクラッシュを防ぐために 3DTouch がサポートされているかどうかを判断します
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
//セルは 3DTouch を登録します
[self registerForPreviewingWithDelegate:self sourceView:cell];
}
sourceView は 3DTouch に応答する必要があるビューです
3. ピークメソッドを実装する
- (UIViewController*)previewingContext:(id)previewingContext viewControllerForLocation:(CGPoint)location
{
// プレビュー ページにはナビゲーション バーが表示されます
PreviewViewController *previewVC = [[PreviewViewController alloc] init];
NavgationViewController *nav = [[NavgationViewController alloc] initWithRootViewController:previewVC];
ナビゲーションに戻ります。
//プレビュー ページにはナビゲーション バーが表示されません
// PreviewViewController *previewVC = [[PreviewViewController alloc] init];
// プレビューVCを返します;
}
プレビュー ページにナビゲーション バーを表示する必要があり、上にスライドしてショートカット メニューを表示する必要がある場合は、UINavigationController を継承する基本クラスを作成する必要があります。書き換え方法、詳しくは私のデモをご覧ください
- (NSArray<id<UIPreviewActionItem>> *)previewActionItems
これは私自身が考えた方法なので、もっと良い方法があれば教えてください。
4.popメソッドの実装
- (void)previewingContext:(id)previewingContext commitViewController:(UIViewController*)viewControllerToCommit
{
//プッシュ操作に相当
PreviewViewController *previewVC = [[PreviewViewController alloc] init];
[self showViewController:previewVC 送信者:self];
}
5. ショートカットメニューの生成(クラスsheetAlertView)
PreviewViewController ビュー コントローラーのメソッドをオーバーライドする
- (NSArray<id<UIPreviewActionItem>> *)previewActionItems{
NSMutableArray *items = [[NSMutableArray alloc] init];
UIPreviewAction*action0 = [UIPreviewActionactionWithTitle:@"标は未读"style:UIPreviewActionStyleDefaulthandler:^(UIPreviewAction*_Nonnullaction,UIViewController*_NonnullpreviewViewController) {
NSLog(@"クリック --> 未読としてマーク");
}];
UIPreviewAction*action1 = [UIPreviewActionactionWithTitle:@"免打扰"style:UIPreviewActionStyleDefaulthandler:^(UIPreviewAction*_Nonnullaction,UIViewController*_NonnullpreviewViewController) {
NSLog(@"クリック --> 邪魔しないでください");
}];
UIPreviewAction*action2 = [UIPreviewActionactionWithTitle:@"置顶"style:UIPreviewActionStyleDefaulthandler:^(UIPreviewAction*_Nonnullaction,UIViewController*_NonnullpreviewViewController) {
NSLog(@"クリック-->トップ");
}];
UIPreviewAction*action3 = [UIPreviewActionactionWithTitle:@"删除"style:UIPreviewActionStyleDestructivehandler:^(UIPreviewAction*_Nonnullaction,UIViewController*_NonnullpreviewViewController) {
NSLog(@"クリック-->削除");
}];
[itemsaddObjectsFromArray:@[action0,action1,action2,action3]];
返却商品;
}
サンプルコード3DTouchDemo