用IPhone6s的3D Touch来称重,比较2个物体的重量

这是一款开源应用,它利用 iPhone 6s 的 3D Touch 屏幕来测量出物体和手机的可能最大力值的相对比。用户还可以选择让 3D Touch 来测量其他物体的相对重量,只要它不超过 iPhone 6s 屏幕能够承受的重量即可。

iPhone的屏幕可以同时检测到五个物体的存在,所以从理论上来说,它或许可以同时对比五个物体的重量。如上图是用户的使用测试,他们发现这款应用使用起来没有什么问题。3D Touch 屏幕的压力敏感度超出用户的想象,在这里你能够发现它可以感应到不同程度的力量。

代码如下:

class ViewController: UIViewController

{

let label = UILabel()

var circles = [UITouch: CircleWithLabel]()

override func viewDidLoad()

{

super.viewDidLoad()

view.multipleTouchEnabled = true

label.text = "lay your plums on me."

label.textAlignment = NSTextAlignment.Center

view.addSubview(label)

}

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)

{

label.hidden = true

for touch in touches

{

let circle = CircleWithLabel()

circle.drawAtPoint(touch.locationInView(view),

force: touch.force / touch.maximumPossibleForce)

circles[touch] = circle

view.layer.addSublayer(circle)

}

highlightHeaviest()

}

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?)

{

for touch in touches where circles[touch] != nil

{

let circle = circles[touch]!

circle.drawAtPoint(touch.locationInView(view),

force: touch.force / touch.maximumPossibleForce)

}

highlightHeaviest()

}

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?)

{

for touch in touches where circles[touch] != nil

{

let circle = circles[touch]!

circles.removeValueForKey(touch)

circle.removeFromSuperlayer()

}

highlightHeaviest()

}

override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?)

{

guard let touches = touches else

{

return

}

for touch in touches where circles[touch] != nil

{

let circle = circles[touch]!

circle.removeFromSuperlayer()

}

}

func highlightHeaviest()

{

func getMaxTouch() -> UITouch?

{

return circles.sort({

(a: (UITouch, CircleWithLabel), b: (UITouch, CircleWithLabel)) -> Bool in

return a.0.force > b.0.force

}).first?.0

}

circles.forEach

{

$0.1.isMax = $0.0 == getMaxTouch()

}

}

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask

{

return UIInterfaceOrientationMask.Landscape

}

override func viewDidLayoutSubviews()

{

label.frame = view.bounds

}

}

// -------------

class CircleWithLabel: CAShapeLayer

{

let text = CATextLayer()

override init()

{

super.init()

text.foregroundColor = UIColor.blueColor().CGColor

text.alignmentMode = kCAAlignmentCenter

addSublayer(text)

strokeColor = UIColor.blueColor().CGColor

lineWidth = 5

fillColor = nil

}

override init(layer: AnyObject)

{

super.init(layer: layer)

}

required init?(coder aDecoder: NSCoder)

{

fatalError("init(coder:) has not been implemented")

}

var isMax: Bool = false

{

didSet

{

fillColor = isMax ? UIColor.yellowColor().CGColor : nil

}

}

func drawAtPoint(location: CGPoint, force: CGFloat)

{

let radius = 120 + (force * 120)

path = UIBezierPath(

ovalInRect: CGRect(

origin: location.offset(dx: radius, dy: radius),

size: CGSize(width: radius * 2, height: radius * 2))).CGPath

text.string = String(format: "%.1f%%", force * 100)

text.frame = CGRect(origin: location.offset(dx: 75, dy: -radius), size: CGSize(width: 150, height: 40))

}

}

// -------------

extension CGPoint

{

func offset(dx dx: CGFloat, dy: CGFloat) -> CGPoint

{

return CGPoint(x: self.x - dx, y: self.y - dy)

}

}

时间: 2024-10-09 21:26:06

用IPhone6s的3D Touch来称重,比较2个物体的重量的相关文章

3D Touch介绍:电子秤App与快捷操作

随着iPhone6s与6s plus的到来,苹果给我们展现了一种全新的交互方式:重按手势.你可能知道,这个特性已经在Apple Watch和MacBook上推出了,不过那时叫Force Touch,就是字面上的意思,给用户的交互添加一种新的维度. 如果你很好奇iPhone的Force Touch为啥要更名为3D Touch,那告诉你吧,you’re not alone(译者注:请用MJ的调子唱出来…).不久前,之前也对这名字纠结不已的Craig Federighi(译者注:Apple高级副总裁)

初识3D Touch

3D Touch  概述: 从.Net转来也快有半年之多了,从小生到现在也算是经历了无所bug了,不过还是打到不了Ios在我心目中的地位!!! 一.前言 在iphone6s问世之后,很多果粉都争先要体验3D Touch给用户带来的额外维度上的交互,这个设计之所以叫做3D Touch,其原理上是增加了一个压力的感触,通过区分轻按和重按来进行不同的用户交互.但是对于开发人员来说我们确实遇到了一个难题:xcode7是支持3D Touch开发的,可是模拟器并不支持这个手势 不过还好的是,在我们码农界的大

iOS9系列专题一——3D Touch

新的触摸体验--iOS9的3D Touch 一.引言 在iphone6s问世之后,很多果粉都争先要体验3D Touch给用户带来的额外维度上的交互,这个设计之所以叫做3D Touch,其原理上是增加了一个压力的感触,通过区分轻按和重按来进行不同的用户交互. 二.在模拟器上学习和测试3D Touch 3D Touch是一个很新颖的设计,可是苹果文档有言: With Xcode 7.0 you must develop on a device that supports 3D Touch. Simu

[转]3D Touch

iOS9的3D Touch 一.引言 在iphone6s问世之后,很多果粉都争先要体验3D Touch给用户带来的额外维度上的交互,这个设计之所以叫做3D Touch,其原理上是增加了一个压力的感触,通过区分轻按和重按来进行不同的用户交互. 二.在模拟器上学习和测试3D Touch 3D Touch是一个很新颖的设计,可是苹果文档有言: With Xcode 7.0 you must develop on a device that supports 3D Touch. Simulator in

3d touch 应用 2 -备用

一.引言 在iphone6s问世之后,很多果粉都争先要体验3D Touch给用户带来的额外维度上的交互,这个设计之所以叫做3D Touch,其原理上是增加了一个压力的感触,通过区分轻按和重按来进行不同的用户交互. 二.在模拟器上学习和测试3D Touch 3D Touch 是一个很新颖的设计,可是苹果文档有言: With Xcode 7.0 you must develop on a device that supports 3D Touch. Simulator in Xcode 7.0 do

iOS 3D Touch功能

新的触摸体验--iOS9的3D Touch 一.引言 在iphone6s问世之后,很多果粉都争先要体验3D Touch给用户带来的额外维度上的交互,这个设计之所以叫做3D Touch,其原理上是增加了一个压力的感触,通过区分轻按和重按来进行不同的用户交互. 二.在模拟器上学习和测试3D Touch 3D Touch 是一个很新颖的设计,可是苹果文档有言: With Xcode 7.0 you must develop on a device that supports 3D Touch. Sim

由3D touch所想到的那些。

最近在看Fview评测iPhone6s的时候,提到3D touch的一个特性是把你后面想做的事情提到前面来,缩短了思维之间的距离,但是增加了学习难度.后来学习了一段时间的vim,看到了知乎上关于吴军博士提出的五笔打字会打断思维的讨论,发现他们之间都有一个共性就是缩短了思维距离,增加了学习难度,熟练之后却能极大的提高效率. vim学习下来所有的体会就是快捷键太多了,所有的文本操作的都可以直接用左半区的键盘完成.但是快捷键之间都有共性,一旦学会之后很容易记住.作为一个初学者,用到某个功能时好像会在脑

IOS 实现3D Touch在tableView的简单应用(swift版)

之前记录过OC版实现3D Touch功能的小小演示,最近无事整整swift,也弄个swift版的3D Touoch... 上代码. 一.3D Touch重按主屏icon出现快捷标签有两种添加方式: 1.静态添加,在工程中的info.plist文件中添加,这种方式添加的标签安装后就能显示 2.动态添加,通过代码动态添加快速入口.这种方式添加的标签,必须先运行一次App才会出现. func application(application: UIApplication, didFinishLaunch

iOS- 指压即达,如何集成iOS9里的3D Touch

1.前言 随着6S的到来,3DTouch被各大热门APP迅速普及,博主亲自体验后,发现使用便捷性大幅提高,随后自己照着文档,写了个Demo出来,分享给大家,希望能对有需要的朋友提供有一些帮助. 2.如何使用3D Touch? 2.1.主界面重按APP图标,弹出Touch菜单 在AppleDelegate文件中的程序入口处配置: didFinishLaunchingWithOptions //给App图标添加3D Touch菜单 //拍照 //菜单图标 UIApplicationShortcutI