PAN手势结束不触发'触摸结束'使用C4View子类? (C4)

时间:2012-12-13 22:46:54

标签: ios c4

所以我正在使用IOS的C4编码框架,我遇到了一些我无法理解的问题。

我正在使用C4 github帐户的两个示例 - testScrollView和WalkCycle示例。

我有一个名为Walker的C4View子类,它使用WalkCycle示例作为小动画角色的模板。此字符放在从testScrollView示例创建的可滚动视图中。他添加了一个平移手势,这样用户就可以将他拖到屏幕顶部,看着他摔倒在底部。

唯一的问题是我无法在平移手势结束时调用任何类型的方法,而不是来自 - (void)touchesEnded命令,而不是来自我尝试过的其他人。

一些链接到类似的问题,这些问题没有帮助我,但可能有助于其他人解决这个问题:

我完全没有受过教育和毫无根据的预感是,它与步行者是C4View的孩子有关,因为我没有这个问题,用c4形状和图像识别touchesEnded。

我不确定要为代码发布什么,但这里是来自Walker.m的相关内容;

-(void)setup {
walkA = [C4Image animatedImageWithNames:@[@"beaviswalk1.tiff",
         @"beaviswalk2.tiff",
         @"beaviswalk3.tiff",
         @"beaviswalk4.tiff",
         @"beaviswalk5.tiff",
         @"beaviswalk6.tiff",
         @"beaviswalk7.tiff",
         @"beaviswalk8.tiff",
         @"beaviswalk9.tiff",
         ]];
[self addImage:walkA];
currentImage = walkA;
[walkA play];

mover = [C4Timer automaticTimerWithInterval:0.05f target:self method:@"walking" repeats:YES];


[self addGesture:TAP name:@"tapGesture" action:@"trip"];
[self addGesture:PAN name:@"panGesture" action:@"move:"];}

和touchesEnded:

-(void)touchesEnded {
C4Log(@"touches Ended");
}

看着Walker.h我才意识到奇怪的事情;

#import "C4View.h"

@interface Walker : C4Image
-(id)initWithFrame:(CGRect)frame;
-(void)play;
-(void)switchWalkCycle;
-(void)trip;
-(void)bleed;
-(void)walking;
-(void)touchesEnded;
-(void)noTouching;
@end

我在某个时刻将@interface更改为C4Image,当时它似乎没有任何效果,并允许我使用TAP和PAN手势。直到现在......将其更改回C4View消除了对所有手势的支持。我想是问题在那里?

道歉,如果有一个简单的解决方案,但我在试图解决这个问题时已经迷失了。

1 个答案:

答案 0 :(得分:4)

您添加到Walker的PAN手势中的move:方法实际上是引用C4Control类中内置的方法(即所有可视对象)。

要确定手势何时被释放,您可以覆盖该方法以添加检查手势状态何时结束的条件。

为此,首先将C4对象子类化(这里我使用的是C4Shape,但你可以使用C4Image)。

标题如下所示:

#import "C4Shape.h"
@interface MyShape : C4Shape
@end

实现将有一个重写的move:方法,如下所示:

#import "MyShape.h"
@implementation MyShape

-(void)move:(id)sender {
    [super move:sender];
    UIPanGestureRecognizer *panGesture = (UIPanGestureRecognizer *)sender;
    if(panGesture.state == UIGestureRecognizerStateEnded) {
        [self methodToRunWhenPanGestureEnds];
    }
}

-(void)methodToRunWhenPanGestureEnds {
    C4Log(@"the pan gesture ended");
}

@end

...最后,在您的工作区中,您可以像平常一样创建一个对象并添加一个手势。

#import "C4WorkSpace.h"
#import "MyShape.h"
@implementation C4WorkSpace
-(void)setup {
    MyShape *s = [[MyShape alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    [s rect:s.frame];
    [s addGesture:PAN name:@"pan" action:@"move:"];
    [self.canvas addShape:s];
}
@end

您可以从此处获取C4项目的副本,其中显示了如何执行此操作:https://github.com/C4Code/PanGestureEnded


至于你所遇到的C4View问题,你是对的...你现在不会在C4Views上做手势。你可以在C4Views中添加常规的UIGestureRecognizers,但方法[object addGesture:name:action:]不起作用,因为我们还没有为C4View类实现这个(但它已经在我们的待办事项清单上)。