Как заставить несколько сенсорных кнопок работать с touchesBegan / Moved?
-
21-09-2019 - |
Вопрос
У меня есть куча кнопок, которые я хочу активировать тремя различными способами.
- Приземление
- Касание вниз - многократное касание (одновременно)
- Коснитесь перетаскивания внутрь (аналогично перемещению пальца по пианино).
Первые два, очевидно, просты в IB.Однако у многих людей, включая меня, были проблемы с сенсорным перетаскиванием внутрь.Так что в итоге я использовал - (void) touchesMoved
[см . код] .Это отлично подходит для перетаскивания...но чтобы заставить это работать, мне пришлось отключить кнопки "Взаимодействие с пользователем" в IB.Это означает, что я потерял "Касание вниз" и мультитач-возможности.
Итак, чтобы заставить "Touch Down" работать, я использовал -(void) touchesBegan [см. Код].Это работает нормально, но я не могу заставить работать мультитач.
Кто-нибудь знает, как я могу заставить мои кнопки срабатывать одновременно во время мультитач?
Или...Есть ли способ заставить сенсорные панели перемещаться, а функции кнопок в IB работать вместе?
Я пытался touch.view.multiTouchEnabled = Yes;
и я позаботился о том, чтобы мои кнопки были в порядке с несколькими касаниями в IB...Но ничего.
Ниже приведен мой код.Большое вам спасибо за вашу помощь.
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event touchesForView:self.view] anyObject];
CGPoint location = [touch locationInView:touch.view];
if(CGRectContainsPoint(p1.frame, location))
{
if (!p1.isHighlighted){
[self pP01];
[p1 setHighlighted:YES];
}
}else {
[p1 setHighlighted:NO];
}
//
if(CGRectContainsPoint(p2.frame, location))
{
if (!p2.isHighlighted){
[self pP02];
[p2 setHighlighted:YES];
}
}else {
[p2 setHighlighted:NO];
}
if(CGRectContainsPoint(p3.frame, location))
{
if (!p3.isHighlighted){
[self pP03];
[p3 setHighlighted:YES];
}
}else {
[p3 setHighlighted:NO];
}
}
///
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event touchesForView:self.view] anyObject];
CGPoint location = [touch locationInView:touch.view];
if(CGRectContainsPoint(p1.frame, location))
{
[self pP01];
[p1 setHighlighted:YES];
}
if(CGRectContainsPoint(p2.frame, location))
{
[self pP02];
[p2 setHighlighted:YES];
}
if(CGRectContainsPoint(p3.frame, location))
{
[self pP03];
[p3 setHighlighted:YES];
}
}
Решение
Вам нужно проверять каждое касание, а не одно случайное.Итак, for(UITouch *t in touches)
вместо того , чтобы UITouch *touch = [touches anyObject]