Frage

Ich habe ein Objekt, das sich von rechts nach links über den Bildschirm bewegt:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:7.8];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
 myImageview.layer.position = CGPointMake(20,  myImageView.layer.position.y);
[UIView commitAnimations];

Ich habe herausgefunden, dass XCode bereits während der Animation die Position des Bildes als endgültiges Ziel markiert. Um eine Berührung des bewegten Bildes zu erkennen, muss ich den PresentationLayer verwenden:

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

    [super touchesBegan:touches withEvent:event];

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

    if ([myImageview.layer.presentationLayer hitTest:touchPoint]) {
        NSLog(@"it's a hit!");
    }
}

Dieser Teil funktioniert.Jetzt möchte ich, dass das Bild nach oben verschoben wird, wenn darauf gedrückt wird.Ich möchte, dass sich das Bild nach oben bewegt, während es seine Seitwärtsbewegung fortsetzt.Stattdessen verschiebt dieser Code das Bild nicht nur nach oben, sondern auch bis zu seinem endgültigen Ziel auf der linken Seite:

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

    [super touchesBegan:touches withEvent:event];

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

    if ([mouse.layer.presentationLayer hitTest:touchPoint]) {
        NSLog(@"it's a hit!");
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.5];
        [UIView setAnimationCurve:UIViewAnimationCurveLinear];
        myImageView.layer.position = CGPointMake( mouse.layer.position.x,  myImageView.layer.position.y - 40);
        [UIView commitAnimations];
    }
}

Ich möchte, dass sich das Bild nach oben bewegt, während es seine Seitwärtsbewegung fortsetzt.Kennt jemand eine Möglichkeit, dies zu erreichen?

Vielen Dank!

War es hilfreich?

Lösung

Haben Sie versucht, die Animationsoption festzulegen? UIViewAnimationOptionBeginFromCurrentState?

(Ich sage Option, weil es eine Option in den blockbasierten Animationsmethoden ist, die mit iOS 4 eingeführt wurden.Es ist auch erhältlich als [UIView setAnimationBeginsFromCurrentState:YES] wenn Sie noch nicht von den veralteten UIView-Klassenmethoden wechseln können.)

touchesBegan wird (unter Verwendung von Blockanimationen):

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

    [super touchesBegan:touches withEvent:event];

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

    if ([mouse.layer.presentationLayer hitTest:touchPoint]) {
        NSLog(@"it's a hit!");
        [UIView animateWithDuration:0.5 delay:0.0 options:(UIViewAnimationOptionCurveLinear & UIViewAnimationOptionBeginFromCurrentState) animations:^{
            myImageView.layer.position = CGPointMake( myImageView.layer.position.x,  mouse.layer.position.y - 40);
        }completion:^(BOOL complete){
            //
        }];
    }
}

Wenn Sie das verwenden, sollten Sie in der Lage sein, das Finale anzugeben x Und y Wählen Sie die gewünschten Koordinaten aus und lassen Sie die Animation von dem Punkt, an dem das Objekt berührt wurde, bis zu dieser Position weiterlaufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top