2012-03-26 5 views
0

Ich habe eine Schaltfläche mit einem iBoutlet verknüpft. Wenn Sie auf die Schaltfläche klicken (* Schaltfläche), wird eine Beschriftung generiert. Das Etikett kann in jeder Position auf dem Bildschirm bewegt werden. Wenn ich erneut auf den Knopf klicke, wird ein anderes Etikett erzeugt, aber ich kann das erste nicht mehr bewegen. Ich suchte im Internet und fand ich eine NSMutableArray verwenden müssen, aber dies scheint nicht zu funktionieren:Verschieben von UILabels auf dem Bildschirm mit NSMutablearray

in.m

-(IBAction)button3Pressed:(id)sender{ 

    self.buttonBrush.selected = NO; 
self.buttonBrush.highlighted = NO; 
self.buttonlabel.selected = YES; 
self.buttonlabel.highlighted = YES; 
self.buttontextbox.selected = NO; 
self.buttontextbox.highlighted = NO; 


CGRect labelFrame = CGRectMake(400, 100, 100, 30); 

label1 = [[UILabel alloc] initWithFrame: labelFrame]; 
[label1 setText: @"Untitled"]; 
[label1 setTextColor: [UIColor orangeColor]]; 
[self.view addSubview:label1]; 
label1.backgroundColor = [UIColor clearColor]; 

if (array == nil) array = [[NSMutableArray alloc]init]; 
    [array addObject:label1]; 

} 

dann

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

//label1 

if (buttonlabel.selected == YES){ 

    UITouch *touch = [touches anyObject]; 
    CGPoint location = [touch locationInView:self.view]; 


    UIView *touchedView = [touch view]; 

    if ([array containsObject:touchedView]){ 

     touchedView.center = location; 
    } 
} 

} 

in .h I hinzugefügt :

IBOutlet UILabel *label1; 
    NSMutableArray *array; 

Vielen Dank im Voraus für die Hilfe

+0

Sie haben einen einzigen ‚=‘ anstelle von ‚==‘ in der letzten if-Anweisung. Denken Sie auch nicht, dass es viel Sinn macht, Ihr Array mit IBOOutlet zu dekorieren. – onnoweb

Antwort

1

EDIT: Verwenden Sie stattdessen das gesamte Etikett des im Array zu testen:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    CGPoint location = [touch locationInView:self.view]; 

    for (UILabel *label in array) { 
     CGPoint localLocation = [label convertPoint:location fromView:self.view]; 
     if ([label pointInside:localLocation withEvent:nil]) { 
      label.center = location; 
      break; 
     } 
    } 
} 
+0

scheint nicht zu funktionieren. es gibt keine fehler, aber was meinst du mit "verschiebe die linie ... so dass es nachher geht". muss ich es nach der allok ?? – Alessandro

+1

Das würde funktionieren, aber ich würde es nach der Konfiguration des Etiketts setzen. (nach 'label1.backgroundColor = [UIColor clearColor]; ') – lnafziger

+0

funktioniert immer noch nicht, mir fehlt etwas ... – Alessandro

Verwandte Themen