所以我正在使用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消除了对所有手势的支持。我想是问题在那里?
道歉,如果有一个简单的解决方案,但我在试图解决这个问题时已经迷失了。
答案 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类实现这个(但它已经在我们的待办事项清单上)。