2012-04-02 4 views
0

Ich habe zwei UIViews mit UIButtons gefüllt. Ich möchte nur zulassen, dass eine Schaltfläche Berührungen gleichzeitig akzeptiert PER UIView. Das heißt, ich möchte Multitouch funktionieren, wenn Sie einen Finger in jeder Gruppe von Tasten haben, aber nicht, wenn Sie beide Finger in derselben Gruppe haben.ExclusiveTouch per UIView

Natürlich setzt exclusiveTouch auf die Tasten, um sicherzustellen, dass jeweils nur eine Taste berührt wird, aber für das gesamte Fenster. Gibt es eine Möglichkeit, nur eine Berührung pro UIView statt des gesamten Fensters zuzulassen?

Update: Also, um ein besseres Verständnis der gewünschten Funktion zu geben. Ich möchte, dass ein Benutzer mithilfe von Multitouch eine rote und eine blaue Karte auswählen kann. Einfach. Aber ich möchte nicht, dass sie zwei rote Karten oder ähnliches auswählen können. Problem ist, wenn ich exklusivTouch auf den Karten einschalte, kann nur eine Karte im GANZEN WINDOW gleichzeitig ausgewählt werden. Die gewünschte Funktionalität besteht darin, dass exclusiveTouch nur PER UIVIEW betreibt, wobei jeder Kartensatz bereits in eine eigene UIView eingebunden ist.

Update 2: Ich wollte nur in werfen, dass ich eine Lösung zu finden versuche, die NICHT Subklassifizieren beinhalten DOES oder anderweitig UIView Berührung Controller überschrieben. Das ist ein letzter Ausweg.

Here is an image

Antwort

3

Wenn eine der Tasten aufsetzt, können Sie userInteractionEnabled Eigenschaft einer anderen Taste auf NO gesetzt und es zurück zu YES gesetzt, während Ausbessern.

UPDATE 1

Sorry, ich war ein Idiot.

UPDATE 2

...

UPDATE 3

Endlich habe ich XCode zurück. Dieser Code funktioniert (wenn ich Ihr Ziel richtig verstanden):

@interface ViewController : UIViewController { 
    NSMutableArray *leftButtonsArray; 
    NSMutableArray *rightButtonsArray; 
} 

@end 

//

@implementation ViewController 

#pragma mark - Objects Processing 

- (void)buttonDownAct:(UIButton *)sender { 
    sender.backgroundColor = [UIColor greenColor]; 

    NSArray *targetArray = nil; 
    if ([leftButtonsArray indexOfObject:sender] == NSNotFound) 
     targetArray = rightButtonsArray; 
    else 
     targetArray = leftButtonsArray; 

    for (UIButton *button in targetArray) 
     if (button != sender) 
      button.userInteractionEnabled = NO; 
} 
- (void)buttonUpAct:(UIButton *)sender { 
    NSArray *targetArray = nil; 
    if ([leftButtonsArray indexOfObject:sender] == NSNotFound) { 
     targetArray = rightButtonsArray; 
     sender.backgroundColor = [UIColor blueColor]; 
    } 
    else { 
     targetArray = leftButtonsArray; 
     sender.backgroundColor = [UIColor redColor]; 
    } 

    for (UIButton *button in targetArray) 
     button.userInteractionEnabled = YES; 
} 

#pragma mark - View lifecycle 

- (void)loadView { 
    leftButtonsArray = [[NSMutableArray alloc] init]; 
    rightButtonsArray = [[NSMutableArray alloc] init]; 

    self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
    self.view.backgroundColor = [UIColor whiteColor]; 
    float desiredWidth = self.view.frame.size.width/4, desiredHeight = self.view.frame.size.height/2; 

    for (int i = 0; i < 4; i++) { 
     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     button.frame = CGRectInset(CGRectMake(desiredWidth * (i % 2), desiredHeight * (i/2), desiredWidth, desiredHeight), 10, 10); 
     [button setBackgroundColor:[UIColor redColor]]; 
     [button addTarget:self action:@selector(buttonDownAct:) forControlEvents:UIControlEventTouchDown]; 
     [button addTarget:self action:@selector(buttonUpAct:) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside]; 

     [self.view addSubview:button]; 
     [leftButtonsArray addObject:button]; 
    } 

    for (int i = 0; i < 4; i++) { 
     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     button.frame = CGRectInset(CGRectOffset(CGRectMake(desiredWidth * (i % 2), desiredHeight * (i/2), desiredWidth, desiredHeight), self.view.frame.size.width/2, 0), 10, 10); 
     [button setBackgroundColor:[UIColor blueColor]]; 
     [button addTarget:self action:@selector(buttonDownAct:) forControlEvents:UIControlEventTouchDown]; 
     [button addTarget:self action:@selector(buttonUpAct:) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside]; 

     [self.view addSubview:button]; 
     [rightButtonsArray addObject:button]; 
    } 
} 

@end 
+0

konnte ich nicht immer noch gleichzeitig aufsetzen und zu Tasten greifen? Ich deaktiviere bereits Tasten bei der Nachbesserung, aber wenn ich gleichzeitig nachlasse, kann der Wahlschalter immer noch auf beide schießen. –

+0

Nun, ich habe nicht wirklich verstanden, was genau du willst. Kannst du Code und Screenshot hochladen? – demon9733

+0

Ich habe gerade verifiziert. Deaktiviert alle Tasten beim Aufsetzen verhindert nicht gleichzeitige Berührungen. Wenn ich also eins anfasse, dann ein anderes, das funktioniert. aber wenn ich beide meiner Berührungen genau gleich tippe, wähle ich beide Knöpfe. Ich werde meine Frage mit einem Screenshot aktualisieren. –

0

Didnt dies versuchen, aber trotzdem. Können Sie zwei UIView auf der Hauptansicht machen, eine für rote Tasten und eine für blaue Tasten. Und setzen exklusive Touch für Ihre Tasten?

+0

Das war, was ich tat, um zu starten. Exklusive Berührung bezieht sich immer auf das Fenster und nicht auf eine Elternansicht. –