- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试创建一个能够检测 4 个手指旋转的手势识别器(类似于旋转音量旋钮)。
主要思想是创建 UIRotateGestureRecognizer 的子类并覆盖其方法。在 -touchesBegan
中,我检测触摸次数,如果该次数低于 4,则手势状态为失败。
之后,我将位置点传递给一个算法,该算法可以找到凸包的直径。如果你考虑一下,你的手指就是顶点,我只需要找到距离最大的两个顶点。获得这两点后,我将它们引用为 ivar,并将它们传递给父类(super class),因为它是一个仅用两根手指的简单旋转。
它不起作用:
-touchesHasMoved
很少被调用有人可以帮助我吗?
代码如下:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
if (touches.count<4) {
//FAIL
self.state = UIGestureRecognizerStateFailed;
return;
}
//Find the diameter of the convex hull
NSArray * touchesArray = [touches allObjects];
NSMutableArray * pointsArray = @[].mutableCopy;
for (UITouch * touch in touchesArray) {
[pointsArray addObject:[NSValue valueWithCGPoint:[touch locationInView:touch.view]]];
}
DiameterType convexHullDiameter = getDiameterFromPoints(pointsArray);
CGPoint firstPoint = convexHullDiameter.firstPoint;
CGPoint secondPoint = convexHullDiameter.secondPoint;
for (UITouch * touch in touchesArray) {
if (CGPointEqualToPoint([touch locationInView:touch.view], firstPoint) ) {
self.fistTouch = touch;
}
else if (CGPointEqualToPoint([touch locationInView:touch.view], secondPoint)){
self.secondTouch = touch;
}
}
//Calculating the rotation center as a mid point between the diameter vertices
CGPoint rotationCenter = (CGPoint) {
.x = (convexHullDiameter.firstPoint.x + convexHullDiameter.secondPoint.x)/2,
.y = (convexHullDiameter.firstPoint.y + convexHullDiameter.secondPoint.y)/2
};
self.rotationCenter = rotationCenter;
//Passing touches to super as a fake rotation gesture
NSSet * touchesSet = [[NSSet alloc] initWithObjects:self.fistTouch, self.secondTouch, nil];
[super touchesBegan:touchesSet withEvent:event];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
if (touches.count<4) {
self.state = UIGestureRecognizerStateFailed;
return;
}
[super touchesMoved:[[NSSet alloc] initWithObjects:self.fistTouch, self.secondTouch, nil] withEvent:event];
}
- (void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesCancelled:[[NSSet alloc] initWithObjects:self.fistTouch, self.secondTouch, nil] withEvent:event];
}
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesEnded:[[NSSet alloc] initWithObjects:self.fistTouch, self.secondTouch, nil] withEvent:event];
}
最佳答案
初始检测困难的原因是所有触摸可能不会同时开始。当单独的触摸落在屏幕上时,touchesBegan 可能会被多次调用。您可以使用事件参数通过 event.allTouches 查询所有当前触摸。因此,您当前触发手势失败的方法将行不通。如果 touches.count < 4,则不应将状态设置为失败,而应在 event.allTouches.count < 4 时返回。如果第四次触摸未在特定时间内发生,则可以使用计时器将状态设置为失败首先。
touchesMoved 可能有问题,因为事件对象中的触摸与您传递给 super 的集合中的触摸不匹配。
关于ios - 旋钮旋转手势识别器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19662900/
我正在使用jQuery Knob我想知道是否有任何方法可以将图像而不是文本放入旋钮内,如果没有,是否有任何其他类似于 jQuery Knob 的插件具有此功能? 最佳答案 简单的回答是肯定的。该旋钮将
我正在尝试使用 jQuery Knob在移动网络应用程序中,因此屏幕分辨率为 320x480(您可以使用 http://www.resizemybrowser.com/ 进行测试)。但是,在此分辨率下
我目前正在设计一个应该包含旋钮的GUI。 png文件有点像“动态图片”堆叠(缺少更好的单词)。 假设图像的长度为32,每个旋钮的高度为32:我需要代码 每转下降32。因此,默认情况下,Timage显示
如果有人以前使用过这个插件: https://github.com/aterrien/jQuery-Knob 我正在尝试应用皮肤:“tron” 尝试添加 但没有成功,还在初始化代码中尝试过: $(".
我正在使用优秀的 jQuery knob plugin .但是,我需要根据用户输入动态启用/禁用该元素。支持在页面加载时具有 disabled 状态,其效果是没有鼠标(或触摸)事件绑定(bind)到
我正在尝试向范围 slider 的旋钮添加动画笑脸,但我不确定是否有办法做到这一点。 这是我正在使用的: var emojis = ['😠','😦','😑','😀','😍']; $("inp
我正在尝试删除 jquery 旋钮上显示的 NaN。我尝试了一些方法,例如设置超时和调整倒计时器。如何修复我的旋钮,使其在首次调用时不再显示 NaN? 示例http://codepen.io/miss
我找到了一个使用旋钮/ slider 来控制 map 上的不透明度的 map 示例。我想使用相同的旋钮/ slider ,但用于不同的东西,而不是 map 的一部分。我有代码( http://www.
我们想要使用 jQuery Knob 来选择我们尝试配置的步长为 0.5 的值步骤:.5 但它不起作用。在 jQuery Slider 中,这确实是这样工作的。是否也可以在旋钮中使用它?这个的语法是什
我正在使用 jquery knob使用 .animate 作为百分比计,效果很好,但我想将旋钮的 Canvas 笔触样式的不透明度设置为 alpha 值,如:0% = 0.1, 100% = 1 并具
我有两个问题。首先,您如何更改旋钮的 CSS?我试过向它添加一个类,但这似乎没有用。也没有做内联样式。任何人都知道如何做到这一点(一个例子会很棒)? 其次,有谁知道如何根据窗口大小修改旋钮的大小?我似
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
有没有人做过这个? - 我正在创建仪表/旋钮。我试图在这张照片中说明想法 想法:您可以拖动按钮并根据拖动按钮的值更改一些文本和填充颜色。我在谷歌上搜索了可能的方法 - 有多种用于仪表动画的解决方案,例
美好的一天。我正在尝试使用 Anthony Terrien 的 jquery Knob使用 Zurb Foundation,但似乎文本输入已损坏。这是一个屏幕截图: http://i.imgur.co
小米米家智能破壁料理机现已开启预售,这款产品支持破壁熬煮、冷热双打,到手价 379 元。 IT之家了解到,米家智能破壁料理机支持破壁、研磨、碎冰、榨汁、冷热双打。热饮最大容量 1200ml,冷
我是一名优秀的程序员,十分优秀!