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



所以我正在使用IOS的C4编码框架,我遇到了一些我不太明白的事情。

我将使用C4 github帐户的两个示例——testScrollView和WalkCycle示例。

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

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

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

  • 检测平移手势完
  • PAN手势中的触摸次数不是工作
  • UIViewController未正确响应手势

我完全没有受过教育,毫无根据的预感是,这与助行器是C4View的孩子有关,因为我在识别触摸时没有这个问题。以C4形状和图像结束。

我真的不确定该为代码发布什么,但以下是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:"];}

和触摸结束:

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

看着沃克。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将取消对所有手势的支持。我想问题就在那里吧?

如果有一个简单的解决方案,我很抱歉,但我很难解决这个问题。

添加到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上使用手势。您可以将常规的UIGestureRecognizer添加到C4Views中,但方法[object addGesture:name:action:]不起作用,因为我们还没有为C4View类实现它(但它已经在我们的待办事项列表中了)。

最新更新