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]