我正在创建一个按钮引擎设计,其中一个处理程序最多可以使用200个按钮。
如果我直接触摸任何按钮,处理程序将触发。目前,我只是将该按钮的alpha设置为零以隐藏它。
我也可以设置它,这样如果我滑动/拖动按钮,处理程序就会触发,并且正确的按钮alpha设置为零。
但是,如果我按下按钮,然后滑动到另一个按钮,则只处理第一个按钮触摸,只有一个按钮消失。如果我没有触及任何按钮内部,那么我可以拖动几十个按钮,它们都会消失。
我是否可以在按钮内触摸时设置一些内容,然后允许我拖动到其他按钮并让处理程序触发?
看起来touchesMoved没有被调用,直到我通过拿起我的手指释放我触摸的按钮。一旦我触摸屏幕而不在任何按钮的框架内,那么touchesMoved将被调用。是否有任何方法可以在触地后和触摸之前强制模拟释放按钮,以便touchesMoved可以在不必拿起手指的情况下再次开始调用?
以下是相关代码:
- (void) GenericButtonHandler: (UIButton *) sender {
// triggers 1 of 200 buttons if dragged through, all using this handler based on the sender.
UIButton *btnSender;
btnSender = (UIButton *)sender;
btnSender.alpha = 0;
}
GenericButton001 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[GenericButton001 addTarget: self action:@selector(GenericButtonHandler:) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:GenericButton001];
[GenericButton001 setAlpha:1.0];
GenericButton001.tag = 1;
GenericButton002 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[GenericButton002 addTarget: self action:@selector(GenericButtonHandler:) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:GenericButton002];
[GenericButton002 setAlpha:1.0];
GenericButton002.tag = 2;
...
我在touchesMoved中调用touchPointIsInsideAnyButton传递当前触摸点:
touchPointIsInsideAnyButton(pointToProcess);
以下是它的编码方式:
static void touchPointIsInsideAnyButton (CGPoint point){
resetGenericButtonIndexing();
UIButton * localButton;
for (int i = 1; i < 201; i++) {
localButton = getNextGenericButton();
if (CGRectContainsPoint(localButton.frame, point) && localButton.alpha == 1)
[localButton sendActionsForControlEvents:UIControlEventTouchDown];
}
} // ends touchPointIsInsideAnyButton
resetGenericButtonIndexing是一个用来保持按钮索引同步的函数。
static void resetGenericButtonIndexing () {
genericButtonIndex = 1;
}
以下是我如何获得下一个通用按钮:
static UIButton * getNextGenericButton () {
UIButton * tempButton = GenericButton001;
switch (genericButtonIndex) {
case 1:
tempButton = GenericButton001;
break;
case 2:
tempButton = GenericButton002;
break;
case 3:
tempButton = GenericButton003;
break;
case 4:
tempButton = GenericButton004;
break;
case 5:
tempButton = GenericButton005;
break;
case 6:
tempButton = GenericButton006;
break;
....
return tempButton;
} // ends getNextGenericButton
答案 0 :(得分:0)
我担心你没有使用正确的工具来做到这一点。如何使用按钮上方的隐形视图来跟踪用户点击的位置,如果他正在拖动,丢弃等,并根据结果触发事件?
看看UIView的触摸事件API
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
找出更好的方法来做到这一点。