Ios 平移手势结束不触发';触摸结束';使用C4View子类?(C4)
因此,我正在使用IOS的编码框架,我遇到了一些我不太清楚的问题 我同时使用了两个帐户示例——testScrollView和WalkCycle示例 我有一个名为Walker的C4View子类,它使用WalkCycle示例作为小动画角色的模板。此字符被放置在从testScrollView示例创建的可滚动视图中。他添加了一个平移手势,这样用户就可以把他拖到屏幕的顶部,看着他摔倒在底部 唯一的问题是,当平移手势结束时,我无法从-(void)touchesend命令和我尝试过的其他命令中调用任何类型的方法 一些类似问题的链接对我没有帮助,但可能有助于其他人解决此问题:Ios 平移手势结束不触发';触摸结束';使用C4View子类?(C4),ios,c4,Ios,C4,因此,我正在使用IOS的编码框架,我遇到了一些我不太清楚的问题 我同时使用了两个帐户示例——testScrollView和WalkCycle示例 我有一个名为Walker的C4View子类,它使用WalkCycle示例作为小动画角色的模板。此字符被放置在从testScrollView示例创建的可滚动视图中。他添加了一个平移手势,这样用户就可以把他拖到屏幕的顶部,看着他摔倒在底部 唯一的问题是,当平移手势结束时,我无法从-(void)touchesend命令和我尝试过的其他命令中调用任何类型的方法
-(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对象的手势识别尚未工作。第二我不确定。我会尽快看一下这两个问题。太棒了,特拉维斯。我明天就试试看。