Tag: hittest

在SpriteKit中,zPosition如何用于渲染和命中testing?

编辑:苹果公司在iOS8中解决了这个问题,所以这肯定不是预期的,而是一个错误。 看起来zPosition在用于渲染节点时与在用于确定哪个节点被触摸时的解释是不同的。 当我创build父节点和子节点的层次结构(全部使用zPosition集合)时,渲染的最顶层节点由通向节点的所有zPositions的总和决定,因此来自不同父节点的节点可以交错。 但是,当确定接收触摸的最顶层节点时,zPosition仅用于区分同一父节点的同胞,当节点具有不同的父节点时,其父节点z顺序优先。 (一个父母的所有孩子都在一个不同的父母的节点之下或之上) 为了说明,一些带有结果的示例代码: #import "MyScene.h" @interface NodeWithHitTest : SKSpriteNode -(instancetype)initWithColor:(UIColor *)color size:(CGSize)size; -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; @end @implementation NodeWithHitTest -(instancetype)initWithColor:(UIColor *)color size:(CGSize)size { self = [super initWithColor:color size:size]; self.userInteractionEnabled = YES; return self; } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"%@ hit", self.name); } @end @implementation MyScene -(id)initWithSize:(CGSize)size { if (self = [super […]

hitTest:WithEvent和Subviews

我有2个观点,但是我想让1个观点(实际上)更大。 如果我把我的tapGesture放在v1上,那么点击手势的作用就是一个更大的点击区域,但是如果我把tapGesture放在v2上,它不起作用(实际上它根本不能识别tapGesture,甚至不在原始范围内)甚至虽然我循环通过我的TestView1的testing方法,并得到包含在框架中的点。 #import "ViewController.h" @interface TestView1 : UIView @end @implementation TestView1 – (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { CGFloat radius = 100.0; CGRect frame = CGRectMake(0, 0, self.frame.size.width + radius, self.frame.size.height + radius); if (CGRectContainsPoint(frame, point)) { return self; } return nil; } @end @interface TestView2 : UIView @end @implementation TestView2 – (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event […]

从UIEvent对象识别触摸手势的types

有没有办法获得触发一个UIEvent触摸手势的types? 所以,假设我用hitTest:withEvent:截取了一个手势。 如何识别触发此方法的触摸(捏,轻敲,滑动等)? 我可以从UIEvent子types获得远程事件的types,即使设备被震动,但没有触摸事件的参数… 你如何识别这些?

如何获得一个CGPoint的UIView?

我试图find一个方法来获得一个特定的UIView CGPoint 。 简而言之,我想做一个testing。 例如,我有一个UIView有许多子视图的大小比父UIView 。 我想要做的是,当touchMoved事件发生时,检查触摸的子视图周围的其他子视图。 为此,能够将CGPoint转换为子视图UIView将会很好。 我是Objective-C的新手。 有没有好的方法来做到这一点? 任何build议将是非常有帮助的。 🙂

Swift:在另一个UIView下的UIView的hitTest

我有RedOrGreenUIView顶部的TransparentUIView。 TransparentUIView有一个UILongPressGestureRecognizer附加到它。 一旦用户开始长时间的触摸,我检查这个LongPressGesture的.Changed状态,并在hitTest下执行: var p:CGPoint = rec.locationInView(self.view) var selectedView = view.hitTest(p, withEvent: nil) if selectedView != nil { if selectedView == TransparentUIView { println("TransparentUIView is being touched") } } 我将TransparentView作为selectedView处理。 但是我需要能够在RedOrGreenUIView上同时进行一次hitTest,这是在TransparentUIView下面。 我无法得到我的头来完成这一点。 请帮忙。

仅在UIImageView的非透明像素上有效检测触摸

如何有效地检测UIImageView的不透明像素? 考虑下面的图像,用UIImageView显示。 目标是使手势识别器只有在图像的非透明(在这种情况下是黑色)区域发生触摸时才作出响应。 思路 重写hitTest:withEvent:或pointInside:withEvent:虽然这种方法可能非常低效,因为这些方法在触摸事件中被调用了很多次。 检查单个像素是否透明可能会产生意想不到的结果,因为手指大于一个像素。 检查命中点周围像素的圆形区域,或尝试find朝向边缘的透明path可能效果更好。 奖金 区分图像的外部和内部透明像素是很好的。 在这个例子中,零内的透明像素也应该被认为是有效的。 如果图像有变换会发生什么? image processing可以硬件加速吗?

UIView的。 为什么在家长的范围之外的子视图没有接触到?

我有一个简单的 – 微不足道的UIView父/子层次结构。 一位家长(UIView)。 一个孩子(UIButton)。 父母的边界比其小,所以孩子的一部分超出了父母的边界框。 问题如下:父母的bbox外的孩子的那些部分不会接触到触摸。 只在父母的bbox内轻敲允许子button接收触摸。 有人可以请build议一个修复/解决方法? UPDATE 对于那些下面的问题,这里是我实施的解决scheme@Bastians最好的答案: – (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { BOOL isInside = [super pointInside:point withEvent:event]; // identify the button view subclass UIButton *b = (UIButton *)[self viewWithTag:3232]; CGPoint inButtonSpace = [self convertPoint:point toView:b]; BOOL isInsideButton = [b pointInside:inButtonSpace withEvent:nil]; if (isInsideButton) { return isInsideButton; } // if (YES […]