Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 平移手势结束不触发';触摸结束';使用C4View子类?(C4)_Ios_C4 - Fatal编程技术网

Ios 平移手势结束不触发';触摸结束';使用C4View子类?(C4)

Ios 平移手势结束不触发';触摸结束';使用C4View子类?(C4),ios,c4,Ios,C4,因此,我正在使用IOS的编码框架,我遇到了一些我不太清楚的问题 我同时使用了两个帐户示例——testScrollView和WalkCycle示例 我有一个名为Walker的C4View子类,它使用WalkCycle示例作为小动画角色的模板。此字符被放置在从testScrollView示例创建的可滚动视图中。他添加了一个平移手势,这样用户就可以把他拖到屏幕的顶部,看着他摔倒在底部 唯一的问题是,当平移手势结束时,我无法从-(void)touchesend命令和我尝试过的其他命令中调用任何类型的方法

因此,我正在使用IOS的编码框架,我遇到了一些我不太清楚的问题

我同时使用了两个帐户示例——testScrollView和WalkCycle示例

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

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

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

我完全没有受过教育和毫无根据的预感是,这与步行者是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");
}
看着沃克,我才意识到一些奇怪的事情

#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,当时它似乎没有任何效果,允许我使用轻拍和平移手势。直到现在…将其改回C4视图消除了对所有手势的支持。我想问题就在那里


如果有一个简单的解决方案,我很抱歉,但我在尝试解决这个问题时迷失了方向。

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

要确定何时释放手势,可以重写该方法以添加一个条件,该条件检查手势的状态何时结束

要做到这一点,您首先要对C4对象进行子类化(这里我使用C4Shape,但您可以使用C4Image)

标题将如下所示:

#import "C4Shape.h"
@interface MyShape : C4Shape
@end
#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
实现将有一个重写的
move:
方法,如下所示:

#import "C4Shape.h"
@interface MyShape : C4Shape
@end
#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项目的副本,该副本显示了如何执行此操作:



至于你的C4View问题,你是对的。。。目前,您无法在C4视图上使用手势。您可以将常规UIgestureRecognitor添加到C4View,但是方法
[对象添加手势:名称:操作:
将不起作用,因为我们还没有为C4View类实现它(但它已经在我们的todo列表中)。

这里发生了两件不同的事情。首先,C4View对象尚未完全实现,因此C4Control对象的手势识别尚未工作。第二我不确定。我会尽快看一下这两个问题。太棒了,特拉维斯。我明天就试试看。