Oto dziwne pytanie. Mam UIImageView, który odpowiada na touchesMoved:
& touchesBegan:
, działa idealnie. Najważniejszą rzeczą, z którą mam problem jest to, że jeśli położysz palec na powiedz obrazie1, a następnie z tym palcem w dół na obrazie1, możesz nacisnąć image2 drugim palcem.touchBegan & touchesMoved
To z kolei spowoduje ponowne uruchomienie obrazu1. Nie chcę, żeby tak się stało. Chciałbym móc korzystać z Multi Touch podczas przesuwania obu obrazów jednocześnie i nie strzelać ich w kółko. Musi być coś, co muszę dodać, żeby to się nie stało.
Kod:
-(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;
}
}
A dla 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;
}
}
Wreszcie oto finał:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
lastButton = nil;
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
[self touchesEnded:touches withEvent:event];
}
Więc po prostu trzeba to zrobić tak, jeśli jestem Przytrzymując jeden z obrazów, a następnie naciśnij inny i zwolnij go ponownie i naciśnij ponownie, aby zatrzymać wypalanie pierwszego obrazu Jestem pressi ng w dół.
Jak byś to napisał? że próbuje się z: - (void) touchesBegan (NSSet *) dotyka withEvent (UIEvent *) zdarzenie { \t UITouch dotykowy * = [[zdarzenie touchesForView: self.view] anyObject]; \t \t Lokalizacja CGPoint = [touch locationInView: touch.view]; Nie sądzę, że o to ci chodziło. Pamiętaj, żeby to napisać, więc rozumiem dokładnie. Dzięki. – AndrewDK
Jednym z parametrów tej metody jest NSSet *, który dotyczy dotknięć, których dotyczy. Tak więc w - (void) touchsBegan: (NSSet *) dotyka zdarzenia Event: (UIEvent *) {...} wystarczy użyć *, że * dotyka zmiennej. Ten zestaw będzie zawierał dotyk (y), które rozpoczęły się podczas tego wydarzenia. - (void) touchesBegan: (NSSet *) dotyka zEvent: (UIEvent *) zdarzenie { UITouch * touch = [dotyka anyObject]; // cokolwiek chcesz zrobić z dotykiem ... } –
Tak, dziękuję za wyjaśnienie, to nadal nie działa. Kiedy kładę palec na jednym obrazie, a następnie naciskam inny, nadal to wystrzeli. Jak dobrze, kiedy spróbuję nacisnąć 2 obrazy jednocześnie, wystrzelą, a wtedy pierwsze trafienie ponownie wystrzeli z tego dotyku. To naprawdę dziwne. – AndrewDK