Iphone 在自定义视图中处理UITapgestureRecognitor

Iphone 在自定义视图中处理UITapgestureRecognitor,iphone,objective-c,cocoa-touch,uigesturerecognizer,uitapgesturerecognizer,Iphone,Objective C,Cocoa Touch,Uigesturerecognizer,Uitapgesturerecognizer,我有一个自定义视图类。在我的视图控制器中,我在这个视图对象上添加了一个点击手势识别器。现在,在点击手势的处理程序中,我正在我的视图对象上设置一个属性,我正试图在我的视图类的drawRect中获取该属性。现在,令人惊讶的是,当我在“HandleTesture”和“drawRect”中打印视图对象时,我得到了两个不同的对象。因此,drawRect中的if条件无法执行。原因可能是什么 它不在状态UIgestureRecognitizerStateStart中。它总是进入UIgestureRecogni

我有一个自定义视图类。在我的视图控制器中,我在这个视图对象上添加了一个点击手势识别器。现在,在点击手势的处理程序中,我正在我的视图对象上设置一个属性,我正试图在我的视图类的drawRect中获取该属性。现在,令人惊讶的是,当我在“HandleTesture”和“drawRect”中打印视图对象时,我得到了两个不同的对象。因此,drawRect中的if条件无法执行。原因可能是什么

它不在状态UIgestureRecognitizerStateStart中。它总是进入UIgestureRecognitzerStateEnd内部

// Adding Gesture in my view
 MyCustomView *customView= [[[MyCustomView alloc] init] autorelease];
UIGestureRecognizer *GestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
        [customView addGestureRecognizer:GestureRecognizer];
        [GestureRecognizer release];

// Handling tap on my view
- (void)handleGesture:(UIGestureRecognizer *)GestureRecognizer; {
    MyCustomView *aView= (MyCustomView *)GestureRecognizer.view;
switch (iGestureRecognizer.state) {
    case UIGestureRecognizerStateBegan:
        NSLog(@"Began");
        [aView setNeedsDisplay];
        aView.touchDown = YES;
        break;
    case UIGestureRecognizerStateEnded:    
        NSLog(@"Ended");
        aView.touchDown = NO;
        [aView setNeedsDisplay];
        break;
    default:
        break;
}
}

// Inside my view class
- (void)drawRect:(CGRect)iRect {
    if (self.touchDown) {
// Do something here
}
}

没有调用drawRect方法。您不想直接这样做,但在HandleTesture方法中,您可以调用[aView setNeedsDisplay],视图的drawRect将在下一个绘图周期中被调用。

如果您想进行一些重构,您可以让自定义视图创建自己的手势识别器和HandleTesture的实现。这样,它就可以在视图内部处理所有这些逻辑,并且您可能不需要您正在使用的着陆标志。也许你甚至可以消除覆盖drawRect的需要:是的。。。我想是的&试过了,但那没用。原因是我在我的“handleGesture”中重新绘制了我的表格,它创建了我的自定义视图的另一个对象&然后这一切都搞砸了。啊,更重要的原因是从控制器到视图的手势识别。毫无疑问,在任何情况下,您都不应该创建自定义视图的其他实例。我的视图控制器中需要处理一些逻辑,因为点击不仅可以驱动我的视图的外观,还可以控制要显示的数据。因此,我正在考虑创建自定义视图对象的可变字典&从那里获取它们,而不是创建新的。