Also hier ist eine seltsame Frage. Ich habe eine UIImageView, die auf touchesMoved:
& touchesBegan:
reagiert, es funktioniert perfekt. Die Hauptsache, mit der ich ein Problem habe, ist, wenn du deinen Finger auf sag image1 legst und dann mit diesem Finger immer noch auf image1 warst, würdest du image2 mit deinem anderen Finger drücken.berührtBegan & berührtMoved
Dies wiederum würde Bild1 erneut auslösen. Ich will nicht, dass das passiert. Ich möchte Multi Touch verwenden können, wenn ich beide Bilder gleichzeitig schiebe und nicht immer wieder feuere. Es muss etwas geben, das ich hinzufügen muss, um das zu verhindern.
Code:
-(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;
}
}
Und für die 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;
}
}
Schließlich sind hier die Endrunde:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
lastButton = nil;
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
[self touchesEnded:touches withEvent:event];
}
Also muss ich es einfach so machen, wenn ich bin Halten Sie eines der Bilder gedrückt und drücken Sie dann ein anderes und lassen Sie es wieder los und drücken Sie es erneut, dass es aufhört, das erste Bild zu schießen, das ich pressi bin ng runter.
Wie würden Sie das schreiben? ich versucht, mit: - (void) touchesBegan: (NSSet *) berührt Withevent: (UIEvent *) Ereignis { \t UITouch * Touch = [[Ereignis touchesForView: self.view] ANYOBJECT]; \t \t CGPoint-Standort = [Touch locationInView: touch.view]; Ich glaube nicht, dass das, was Sie meinten, obwohl. Denk daran, es so zu schreiben, dass ich es genau verstehe. Vielen Dank. – AndrewDK
Einer der Parameter für diese Methode ist ein NSSet *, der die Berührungen betrifft, die betroffen sind. Also in - (void) touchesBegan: (NSSet *) berührt mitEvent: (UIEvent *) Ereignis {...} verwenden Sie einfach * das * berührt Variable. Dieser Satz enthält die Berührung (en), die während dieses Ereignisses begonnen haben. - (void) touchesBegan: (NSSet *) Berührungen withEvent: (UIEvent *) Ereignis { UITouch * touch = [berührt anyObject]; // was auch immer Sie mit Touch tun möchten ... } –
Ja danke für die Klärung, es funktioniert immer noch nicht. Wenn ich einen Finger auf ein Bild drücke und dann einen anderen drücke, wird es immer noch feuern. Wenn ich zwei Bilder auf einmal schieße, feuern sie und dann wird der erste Treffer mit dieser Berührung wieder ausgelöst. Es ist wirklich komisch. – AndrewDK