简体   繁体   中英

a question about multitouch

I have several uiimages that I can move around on the iphonescreen using multitouches. The thing is that I want to separate them in two "teams" , a "team" of uiimages that I move inside an area of my choice and a "team" that I can move all over the screen.

My question is how to use the touch methods (touchesbegan, touchesended, touchesmoved) for both of the two uiimage "teams" and their cgpoints without the cgpoints from both "teams" crossing each other and giving wrong uiimages wrong positions on the screen. the 1st "team" uses the touchesbegan, touchesmoved and touchesended methods. the 2nd "team" only uses the touchesended method.

Here´s my code. I hope that the 2 "teams" don´t cross with each other in the touchesended method

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
     //1st team
     for(UITouch *touch in touches){

     // Send to the dispatch method, which will make sure the appropriate subview is acted upon
     [self getRubyAtPoint:[touch locationInView:self.view]forEvent: nil]; 

     }
 }

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

NSLog(@"touchesEnded");
//1st team
// Enumerates through all touch object
for (UITouch *touch in touches) {
    // Sends to the dispatch method, which will make sure the appropriate subview is acted upon
    [self dispatchTouchEndEvent:[touch view] toPosition:[touch locationInView:self.view]];
}

    //2nd team
UITouch *touch = [touches anyObject];
CGPoint currentTouch = [touch locationInView:self.view];    

[self getPieceAtPoint:currentTouch];

 }

 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
     //1st team
 NSLog(@"touchesMoved");

 // Enumerates through all touch objects
 for (UITouch *touch in touches) {

     // Send to the dispatch method, which will make sure the appropriate subview is acted upon
     [self dispatchTouchEvent:[touch view] toPosition:[touch locationInView:self.view]];

 }
  }

If I understand, you are asking how to keep the methods such as getPieceAtPoint from acting on the wrong team.

I think I'd just add a unique tag range to each team and check that before acting on it.

Something like:

UITouch *touch = [touches anyObject];
if ([touch view].tag>=TEAM_TWO_BASE_TAG)
{
     CGPoint currentTouch = [touch locationInView:self.view];    
     [self getPieceAtPoint:currentTouch];
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM