Итак, вот странный вопрос. У меня есть UIImageView, который отвечает на touchesMoved:
& touchesBegan:
, он отлично работает. Главное, с чем я столкнулся, - это если вы положите палец вниз на изображение image1, а затем с тем пальцем, который все еще находится на изображении1, вы бы нажали image2 другим пальцем.touchsBegan & touchesMoved
В свою очередь, это снова выстрелило бы image1. Не хочу, чтобы это произошло. Я хочу, чтобы иметь возможность использовать Multi Touch при одновременном нажатии обоих изображений, а не повторять их снова и снова. Должно быть что-то, что я должен добавить, чтобы это не происходило.
Код:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSSet *allTouches = [event allTouches];
for (UITouch *touch in allTouches)
{
CGPoint location = [touch locationInView:touch.view];
if(CGRectContainsPoint(image1.frame, location) && lastButton != image1) {
//Play Sound
NSString *path = [[NSBundle mainBundle] pathForResource:@"sound1"
ofType:@"wav"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path]
, &soundID);
AudioServicesPlaySystemSound (soundID);
//
lastButton = image1;
}
if(CGRectContainsPoint(image2.frame, location) && lastButton != image2) {
//Play Sound
NSString *path = [[NSBundle mainBundle] pathForResource:@"sound2"
ofType:@"wav"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path]
, &soundID);
AudioServicesPlaySystemSound (soundID);
//
lastButton = image2;
}
}
И для touchesMoved:
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:touch.view];
if(CGRectContainsPoint(image1.frame, location) && lastButton != image1) {
//Play Sound
NSString *path = [[NSBundle mainBundle] pathForResource:@"sound1"
ofType:@"wav"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path]
, &soundID);
AudioServicesPlaySystemSound (soundID);
//
lastButton = image1;
}
if(CGRectContainsPoint(image2.frame, location) && lastButton != image2) {
//Play Sound
NSString *path = [[NSBundle mainBundle] pathForResource:@"sound2"
ofType:@"wav"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path]
, &soundID);
AudioServicesPlaySystemSound (soundID);
//
lastButton = image2;
}
}
Наконец вот финал:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
lastButton = nil;
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
[self touchesEnded:touches withEvent:event];
}
Так что я просто нужно сделать так, если я удерживая одно из изображений, а затем нажмите другое и отпустите его снова и снова нажмите, чтобы он не загорелся первым изображением. Я нажимаю ng вниз.
Как бы вы это описали? Я попытался с помощью: - (Недействительными) touchesBegan: (NSSet *) касается withEvent: (UIEvent *) событие { \t UITouch * сенсорный = [[touchesForView событие: self.view] anyObject]; \t \t CGPoint location = [touch locationInView: touch.view]; Я не думаю, что это то, что вы имели в виду. Помните, что я это точно понимаю. Благодарю. – AndrewDK
Одним из параметров этого метода является NSSet *, который затрагивает затронутые проблемы. Итак, в - (void) touchhesBegan: (NSSet *) затрагивает событиеEvent: (UIEvent *) event {...} просто используйте *, который * касается переменной. Этот набор будет содержать прикосновения, которые начались во время этого события. - (void) touchesBegan: (NSSet *) затрагивает событиеEvent: (UIEvent *) { UITouch * touch = [касается любого объекта]; // что вы хотите сделать с сенсорным ... } –
Да, спасибо за разъяснение, он все еще не работает. Когда у меня есть палец на одном изображении, а затем нажмите еще один, он все равно выстрелит. Также, когда я пытаюсь нажать два изображения сразу, они срабатывают, а затем первый удар снова выстрелит с этим прикосновением. Это действительно странно. – AndrewDK