Cocoa Touch 中的两种方法“按住按钮”

Posted

技术标签:

【中文标题】Cocoa Touch 中的两种方法“按住按钮”【英文标题】:Two Method "Hold Down Button" in Cocoa Touch 【发布时间】:2014-07-30 18:52:34 【问题描述】:

我有两个按住按钮,紧挨着。一个覆盖 ios 屏幕的右半部分,另一个覆盖屏幕的左半部分。它们的代码是(左方法的相反坐标相关值):

- (IBAction)RightStart:(id)sender //Touch Event is TOUCH DOWN

    RightTimer = [NSTimer scheduledTimerWithTimeInterval:RightSpeed target:self selector:@selector(RightMove) userInfo:nil repeats:YES] ;
    if(RightTimer == nil)
        RightTimer = [NSTimer scheduledTimerWithTimeInterval:RightSpeed target:self selector:@selector(RightMove) userInfo:nil repeats:YES] ;
    


- (IBAction)RightStop:(id)sender   //Touch Event is TOUCH UP INSIDE

    [RightTimer invalidate] ;
    RightTimer = nil ;


- (void)RightMove
    Player.center = CGPointMake(Player.center.x + 1,Player.center.y) ;
    if(Player.center.x > 304)
        Player.center = CGPointMake(304, Player.center.y) ;
    

当用户将手指(我的鼠标)放在其中一个按钮上并将其滑到另一个按钮上时,图像会移动到屏幕的一侧并停留在那里(因为有锁所以它不能屏幕移动)。

从断点看来,当鼠标/手指从按钮上扫过而没有真正从屏幕上释放时,stop 方法永远不会运行。然后尝试向另一方向移动时,比如向左移动,将其从侧面移开,它向左移动 1 个像素,然后向右移动 1 个像素,依此类推。因为按住左键启动左定时器,而右定时器也在运行,图像不动。

我应该如何解决程序在按住按钮时无法识别手指已离开按钮但使用双功能按住按钮滑动离开的问题?

【问题讨论】:

尝试在UIViewtouches moved 方法中获取手指位置并使用CGRectContainsPoint() 进行检查。使用boolean 值来操纵移动。 也可以将按钮的sent action设置为touchDragOutside 【参考方案1】:

为了解决这个问题,类似于@Abhishek Bedi 所说,创建一个与 RightStop 方法相同的新 IBAction 方法,但使用 touchDragExit 操作。

【讨论】:

以上是关于Cocoa Touch 中的两种方法“按住按钮”的主要内容,如果未能解决你的问题,请参考以下文章

Cocoa Touch 中的 MVC:视图和模型如何交互?

合理的 Cocoa 和 Cocoa Touch 默认值

Cocoa Touch 框架无法识别

静态 cocoa/cocoa-touch 库应该基于啥样的 SDK?

在 Cocoa Touch 中做 UILabel 动画的更好方法?

Cocoa-touch - 用核心图形绘制到一个接触点