如何在触摸释放时使 IBAction 方法无效

Posted

技术标签:

【中文标题】如何在触摸释放时使 IBAction 方法无效【英文标题】:How to invalidate an IBAction method on touch release 【发布时间】:2016-03-06 22:20:05 【问题描述】:

这是我用来尝试在触摸释放时使 IBActions“TouchEndedLeft”和“TouchEndedRight”无效的代码

-(IBAction)LeftArrowTapped:(id)sender; 

[self heroMovementTimerMethodLeft];



-(IBAction)RightArrowTapped:(id)sender; 

[self heroMovementTimerMethodRight];



-(void)heroMovementLeft

hero.center = CGPointMake(hero.center.x -.5, hero.center.y );



-(void)heroMovementRight

hero.center = CGPointMake(hero.center.x +.5, hero.center.y );



-(void)heroMovementTimerMethodLeft 

heroMovementTimerLeft = [NSTimer 
scheduledTimerWithTimeInterval:speedOfhero 
target:self selector:@selector(heroMovementLeft) userInfo:nil 
repeats:YES];


-(void)heroMovementTimerMethodRight 

heroMovementTimerRight = [NSTimer
scheduledTimerWithTimeInterval:speedOfhero 
target:self selector:@selector(heroMovementRight) userInfo:nil 
repeats:YES];

这是我尝试使用触摸取消 IBAction 样式使方法无效的方法

-(IBAction)TouchendedLeft:(id)sender; 

[heroMovementTimerLeft invalidate];


-(IBAction)TouchendedRight:(id)sender; 

[heroMovementTimerRight invalidate];


当您松开手指时,使 IBAction 方法无效的最佳方法是什么?我尝试过在外部进行触摸取消修饰并在 IBAction 样式内部进行修饰,但似乎都不起作用。我使用了错误的 IBAction 风格?错误的方法类型?还是我执行代码错误?

【问题讨论】:

【参考方案1】:

如果您制作两个 IBAction,每个按钮对应一个所需的事件,您应该能够捕获 touchdown: 事件和 touchUpInside: 事件。最初的按下应该与 touchdown: 事件和使用 touchUpInside: 事件的按钮释放相关联。听起来您正在尝试制作游戏,您是否研究过 SpriteKit(2D) 或 SceneKit (3D) 框架?

【讨论】:

成功了!太感谢了!是的,我正在制作一款游戏,我对 sprite kit 2d 进行了一些研究,用于模拟摇杆,我将为我的角色使用 cocos 2dx

以上是关于如何在触摸释放时使 IBAction 方法无效的主要内容,如果未能解决你的问题,请参考以下文章

如何在单选按钮单击时使按钮无效?

如何将 UIButton 的高亮属性设置为 NO?

如何控制 UIWebView 上的触摸? (苹果手机)

在大小更改时使集合视图布局无效的正确方法

在 Swift 中高亮时使 CollectionViewCell 反弹

如何使用 jQuery 在单击和鼠标悬停时使可滚动的 div 滚动