calayer上的Objective-c命中测试

calayer上的Objective-c命中测试,objective-c,calayer,Objective C,Calayer,我的视图层次结构设置如下: UIViewController* gameBoard FEG_Navigator* vNavigation FEG_Controller* vController1 FEG_Controller* vController2 在FEG_控制器I中,使用以下代码进行超车绘制: - (void)drawRect:(CGRect)rect { arc = [CAShapeLayer layer]; arc.path =

我的视图层次结构设置如下:

UIViewController* gameBoard
    FEG_Navigator* vNavigation
       FEG_Controller* vController1
       FEG_Controller* vController2
在FEG_控制器I中,使用以下代码进行超车绘制:

- (void)drawRect:(CGRect)rect {

    arc = [CAShapeLayer layer];
    arc.path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(100, 50) radius:self.radius startAngle:M_PI endAngle:M_PI/150 clockwise:self.isClockwise].CGPath;
    arc.position = CGPointMake(CGRectGetMidX(self.frame)-self.radius,
                               CGRectGetMidY(self.frame)-self.radius);
    arc.fillColor = self.clrCircle.CGColor;
    arc.cornerRadius = 0.5;

    [self.layer addSublayer:arc];

}  
在init中,我有self.userInteractionEnabled=YES

当我在gameBoard中初始化控制器时,我会向其添加点击手势-

//set up controllers
    UITapGestureRecognizer* controller1Tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(moveTurret:)];
    controller1 = [[FEG_RA_Controller alloc] initWithFrame:CGRectMake(-22, 3.0, 35.0, 35.0)];
    [controller1 makeController:self.clrUserColor :35.0 :1.0:YES];
    controller1.tag = 100;
    [controller1 addGestureRecognizer:controller1Tap];
    [vNavigator addSubview:controller1]; 
现在,MoveTotalta所做的就是记录发送者视图的标记(UITapGestureRecognitor)

我什么也得不到。因此,我在互联网上四处搜索,发现了一个漂亮的网站,里面有一些有趣的东西,包括:


所以Calayer在响应链之外,这是有道理的。从概念上讲,我得到了作者所解释的,我只是在将其应用到我的情况时遇到了困难——touchesEnded应该去哪里?在FEG_控制器中

touchesend将在FEG_控制器中实现,我假设它是UIView子类。这可能只是一个输入错误,但您是否使用了正确的子类?您声明了一个FEG_控制器,并且正在实现一个FEG_RA_控制器。只是确定一下。使用touchesend将一起取代轻触手势识别器,基本上,您将编写自己的手势识别器,这是不需要的(或有益的,您将失去轻触手势识别器的一些便利)。如果要将手势识别器保留在视图控制器中,只需在MoveTotalta中进行检查:

if ([arc containsPoint:[tap locationInView:self]])
    //then move the turret
else
    //don't
并将手势识别器从FEG_控制器的帧移动到主视图控制器的边界:

[self.view addGestureRecognizer:controller1Tap]