ios – 使用C4View子类,PAN手势结束不会触发“触摸结束”? (C4)

ios – 使用C4View子类,PAN手势结束不会触发“触摸结束”? (C4),第1张

概述所以我正在使用 IOS的 C4编码框架,我遇到了一些我无法弄清楚的问题. 我一起使用了两个C4 github帐户的例子 – testScrollView和WalkCycle示例. 我有一个名为Walker的C4View子类,它使用WalkCycle示例作为小动画角色的模板.此字符放在从testScrollView示例创建的可滚动视图中.他添加了一个平移手势,以便用户可以将他拖到屏幕顶部,然后看着他 所以我正在使用 IOS的 C4编码框架,我遇到了一些我无法弄清楚的问题.

我一起使用了两个C4 github帐户的例子 – testScrollVIEw和WalkCycle示例.

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

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

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

> Detecting Pan Gesture
End
> Number of touches in PAN gesture is not
working
> UIViewController not responding properly to
gestures…

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

我不确定要为代码发布什么,但这里是来自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消除了对所有手势的支持.我想是问题在那里?

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

解决方法 移动:您添加到Walker的PAN手势的方法实际上是引用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,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类实现这个(但它已经在我们的待办事项列表中了).

总结

以上是内存溢出为你收集整理的ios – 使用C4View子类,PAN手势结束不会触发“触摸结束”? (C4)全部内容,希望文章能够帮你解决ios – 使用C4View子类,PAN手势结束不会触发“触摸结束”? (C4)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1052522.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存