UIButton触摸并保持
我还没有find一个很简单的方法来做到这一点。 我见过的方式需要所有这些计时器和东西。 有没有什么简单的方法,我可以持有一个UIButton,并导致它重复一遍又一遍的行动,直到它被释放?
您可以执行以下操作:创build一个NSTimer,在应用程序启动时或者在viewDidLoad中启动,并创build一个布尔值。
例如:
//Declare the timer, boolean and the needed IBActions in interface. @interface className { NSTimer * timer; bool g; } -(IBAction)theTouchDown(id)sender; -(IBAction)theTouchUpInside(id)sender; -(IBAction)theTouchUpOutside(id)sender; //Give the timer properties. @property (nonatomic, retain) NSTimer * timer;
现在在你的实现文件(.m)中:
//Synthesize the timer @synthesize timer; //When your view loads initialize the timer and boolean. -(void)viewDidLoad { g = false; timer = [NSTimer scheduledTimerWithInterval: 1.0 target:self selector:@selector(targetMethod:) userInfo:nil repeats: YES]; }
现在做一个IBAction为“触摸下”设置布尔值让说真。 然后为“Touch Up Inside”和“Touch Up Outside”创build另一个IBActionbutton,将boolean赋值为false。
例如:
-(IBAction)theTouchDown { g = true; } -(IBAction)theTouchUpInside { g = false; } -(IBAction)theTouchUpOutside { g = false; }
然后在那个NSTimer方法中,放入以下内容:(假设g是你声明的布尔值)
-(void) targetmethod:(id)sender { if (g == true) { //This is for "Touch and Hold" } else { //This is for the person is off the button. } }
我希望这简化了一切…我知道它仍然使用计时器,但没有别的办法。
不幸的是,它仍然看起来像你必须为自己编写这个function。 最简单的方法(你仍然需要一个计时器):
一个执行你想要重复的动作的函数:
-(void) actionToRepeat:(NSTimer *)timer { NSLog(@"Action triggered"); }
在你的.h文件中声明并设置一个定时器的属性:
@interface ClassFoo { NSTimer* holdTimer; }
然后在.m中做两个IBActions:
-(IBAction) startAction: (id)sender { holdTimer = [NSTimer scheduledTimerWithTimeInterval:0.4 target:self selector:@selector(actionToRepeat:) userInfo:nil repeats:YES]; [holdTimer retain]; } -(IBAction) stopAction: (id)sender { [holdTimer invalidate]; [holdTimer release]; holdTimer = nil; }
然后,只需链接到IB中的Touch Down
事件,即可从startAction
button到Touch Up Inside
Action Touch Up Inside
中的“停止操作”。 这不是一个class轮,但它可以让你自定义的动作重复的速度,以及让你从另一个sockets/动作触发它。
你可能会考虑UIButton
并添加这个function,如果你打算经常使用这个function – 那么第一次实现只是(稍微)痛苦的。
另一种使用此NBTouchAndHoldButton的方法 。 这正是你想要的,而且很容易实现它:
TouchAndHoldButton * pageDownButton = [TouchAndHoldButton buttonWithType:UIButtonTypeCustom]; [pageDownButton addTarget:self action:@selector(pageDownAction:) forTouchAndHoldControlEventWithTimeInterval:0.2];
祝你好运!
我不能回复第一个,但是这一行:
timer = [NSTimer scheduledTimerWithInterval: 1.0 target:self selector:@selector(targetMethod:) userInfo:nil repeats: YES];
至lessiOS 4.1和更新的需求是:
timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(targetMethod:) userInfo:nil repeats: YES];
我知道这是一个古老的问题,但作为一个简单的方法,就像考虑使用“[NSObject performSelector:withObject:afterDelay:]”来重复调用任何特定时间间隔的方法。
在这种情况下:
NSTimeInterval someTimeInterval = 1; - (IBAction)action:(id)sender { UIButton * const button = sender; if (button.state != UIControlStateHighlighted) { return; } [NSObject cancelPreviousPerformRequestsWithTarget:self selector:_cmd object:sender]; [self performSelector:_cmd withObject:sender afterDelay:someTimeInterval]; }