在Tamarin中 3D Touch 的使用
来源:互联网 发布:怎样管理海量数据 编辑:程序博客网 时间:2024/05/23 02:27
新的iPhone6s和iPhone6s Plus新添加了3D Touch的功能,本文简单介绍一下如何在Xamarin.iOS上面使用该功能。
3D Touch不仅会感知用户按压屏幕,也会感知压力的大小。要注意一点的是,现在的iOS模拟器并不支持3D Touch,大家必须要在iPhone 6s/6s Plus 真机上进行测试和调试。
3D Touch可以给你的应用带来全新的交互方式.
•Pressure Sensitivity - 应用可以感知用户按压屏幕的压力。这样一些绘画应用可以根据压力的大小改变笔触。
•Peek and Pop - 应用可在单一页面中获取更多的内容。用户用力按压屏幕会弹出当前条目的额外信息,比如一些预览信息,这个行为叫做Peek,当用户再用力一点,可以跳转到预览信息的页面,这个行为叫做Pop。
•Quick Actions - 这个行为有点类似于windows中的右键菜单,但是只是针对于应用图标的,显示一些关于这个应用的额外选项
下面我们分开来讲
Pressure Sensitivity
在Xamarin iOS中,获取压力的大小非常简单,我们可以通过UITouch类中的一些属性来完成。我们只需要在ToucheMoved的事件中捕获这些信息,请参考一下代码
这里要注意的是,用户按压会触发TouchesMoved的事件,在这样的情况下X/Y的值是不变的,如果你的应用之前的代码是通过这个事件来判断X,Y值的是否改变,现在需要注意,X/Y不一定改变。相关文档请参考 TouchCanvas: Using UITouch efficiently and effectively 和 UITouch Class Reference.
Peek and Pop
这个交互行为会让用户更快的获取信息,比如用户在浏览一个表格,用户可以按压表格中的某项,获取一些关于该项的概况信息(这个行为叫做Peek),再用力一些,就可进入该项的详情页(这个行为叫做Pop或Pop-ping)。
检测设备是否支持3D Touch
可以通过下面的代码,在UIViewController 中判断当前设备是否支持3D Touch
响应Peek和Pop行
我们可以通过继承UIViewControllerPreviewingDelegate类来响应Peek和Pop的行为。请参考下面代码,假设我们之前提到的表格叫做MasterViewController
代码中GetViewControllerForPreview函数用来响应Peek行为,在这个函数中,首先我们获取当前表单,然后我们加载DetailViewController,接着通过PreferredContentSize设置Peek窗口的默认大小,最后我们通过previewingContext.SourceRect = cell.Frame 这段代码来模糊其他表单,然后返回我们想要的窗口。
CommitViewController 这个函数会利用我们在Peek行为中创建的窗口,来给Pop显示。
注册Peek和Pop行为
在使用Peek和Pop之前,我们要注册他们,在当前的ViewController,请参考下面代码
3D Touch不仅会感知用户按压屏幕,也会感知压力的大小。要注意一点的是,现在的iOS模拟器并不支持3D Touch,大家必须要在iPhone 6s/6s Plus 真机上进行测试和调试。
3D Touch可以给你的应用带来全新的交互方式.
•Pressure Sensitivity - 应用可以感知用户按压屏幕的压力。这样一些绘画应用可以根据压力的大小改变笔触。
•Peek and Pop - 应用可在单一页面中获取更多的内容。用户用力按压屏幕会弹出当前条目的额外信息,比如一些预览信息,这个行为叫做Peek,当用户再用力一点,可以跳转到预览信息的页面,这个行为叫做Pop。
•Quick Actions - 这个行为有点类似于windows中的右键菜单,但是只是针对于应用图标的,显示一些关于这个应用的额外选项
下面我们分开来讲
Pressure Sensitivity
在Xamarin iOS中,获取压力的大小非常简单,我们可以通过UITouch类中的一些属性来完成。我们只需要在ToucheMoved的事件中捕获这些信息,请参考一下代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
...
}
}
这里要注意的是,用户按压会触发TouchesMoved的事件,在这样的情况下X/Y的值是不变的,如果你的应用之前的代码是通过这个事件来判断X,Y值的是否改变,现在需要注意,X/Y不一定改变。相关文档请参考 TouchCanvas: Using UITouch efficiently and effectively 和 UITouch Class Reference.
Peek and Pop
这个交互行为会让用户更快的获取信息,比如用户在浏览一个表格,用户可以按压表格中的某项,获取一些关于该项的概况信息(这个行为叫做Peek),再用力一些,就可进入该项的详情页(这个行为叫做Pop或Pop-ping)。
检测设备是否支持3D Touch
可以通过下面的代码,在UIViewController 中判断当前设备是否支持3D Touch
1
2
3
4
5
6
7
8
9
10
public
override
void
ViewDidLoad ()
{
base
.ViewDidLoad ();
// 检测是否支持3D Touch
if
(TraitCollection.ForceTouchCapability == UIForceTouchCapability.Available) {
// 设备支持
...
}
}
响应Peek和Pop行
我们可以通过继承UIViewControllerPreviewingDelegate类来响应Peek和Pop的行为。请参考下面代码,假设我们之前提到的表格叫做MasterViewController
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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
/// 继续按压触发Pop事件
public
override
void
CommitViewController (IUIViewControllerPreviewing previewingContext, UIViewController viewControllerToCommit)
{
// 直接使用之前创建好的详情页面
MasterController.ShowViewController(viewControllerToCommit,
this
);
}
/// 创建预览页面,当用户触发Peek事件
public
override
UIViewController GetViewControllerForPreview (IUIViewControllerPreviewing previewingContext, CGPoint location)
{
// 判断表格中的条目
var indexPath = MasterController.TableView.IndexPathForRowAtPoint (location);
var cell = MasterController.TableView.CellAt (indexPath);
var item = MasterController.dataSource.Objects [indexPath.Row];
// 创建ViewController,并设置初始位置
var detailViewController = MasterController.Storyboard.InstantiateViewController (
"DetailViewController"
)
as
DetailViewController;
detailViewController.PreferredContentSize =
new
CGSize (0, 0);
// 填入数据
detailViewController.SetDetailItem (item);
detailViewController.NavigationItem.LeftBarButtonItem = MasterController.SplitViewController.DisplayModeButtonItem;
detailViewController.NavigationItem.LeftItemsSupplementBackButton =
true
;
// 设置预览页面的位置,模糊其他页面
previewingContext.SourceRect = cell.Frame;
return
detailViewController;
}
#endregion
}
}
代码中GetViewControllerForPreview函数用来响应Peek行为,在这个函数中,首先我们获取当前表单,然后我们加载DetailViewController,接着通过PreferredContentSize设置Peek窗口的默认大小,最后我们通过previewingContext.SourceRect = cell.Frame 这段代码来模糊其他表单,然后返回我们想要的窗口。
CommitViewController 这个函数会利用我们在Peek行为中创建的窗口,来给Pop显示。
注册Peek和Pop行为
在使用Peek和Pop之前,我们要注册他们,在当前的ViewController,请参考下面代码
1
2
3
4
5
6
7
8
9
10
11
12
public
override
void
ViewDidLoad ()
{
base
.ViewDidLoad ();
// 判断设备是否支持3D Touch
if
(TraitCollection.ForceTouchCapability == UIForceTouchCapability.Available) {
// 注册Pop和Peek
RegisterForPreviewingWithDelegate(
new
PreviewingDelegate(
this
), View);
}
...
}
0 0
- 在Tamarin中 3D Touch 的使用
- 3D touch的使用
- 在iPhone上使用3D Touch
- 在iPhone上使用3D Touch
- 在iPhone上使用3D Touch
- 3D touch在Unity3D中的使用
- IOS 3D touch的使用
- ios 3D Touch 的使用
- 3D Touch的基本使用
- 3D Touch 使用心得(仿微信3D Touch)
- 浅谈3D Touch 在Xamarin.iOS上的应用
- 浅谈3D Touch 在Xamarin.iOS上的应用
- IOS 实现3D Touch在tableView的简单应用
- tamarin中interpter的一点分析
- iOS开发 3D Touch的简单使用
- iOS 3D Touch开发tableview页面内的使用
- iOS开发--3D Touch的基本使用
- 3D Touch 的实现:
- 4423: [AMPPZ2013]Bytehattan 平面图转对偶图+并查集
- 第三周课上作业 小学生计算能力
- Ubuntu系统上脚本文件执行时报No such file or directory的问题
- 树莓派安装Python-OpenCV
- 小学生自测系统
- 在Tamarin中 3D Touch 的使用
- 第3周项目2-本月有几天?
- 第三周项目4:穷举法解决组合问题(8)辩数字
- jsp页面内容显隐总结
- 入门Android开发----国家天地图开发= = 哈哈哈哈。。因为需要
- Java NIO 与 IO之间的区别
- 缓存着色技术(Cache Coloring)
- 各种编程语言的深度学习库整理
- 第三周项目四-换分币