2011-10-02 15 views
23

Estoy tratando de encontrar la posición actual de un iPhone ImageView que está animando en la pantalla.Accediendo a la posición actual de UIView durante la animación

puedo crear y animar la imageView al igual que

-(IBAction)button:(UIButton *)sender{ 
    UIImageView *myImageView =[[UIImageView alloc] initWithImage: 
            [UIImage imageNamed:@"ball.png"]];  
    myImageView.frame = CGRectMake(0, self.view.frame.size.height/2, 40, 40);  
    [self.view addSubview:myImageView]; 
    [myArray addObject:myImageView]; 

    [UIView animateWithDuration:.5 
          delay:0 
       options:(UIViewAnimationOptionAllowUserInteraction) // | something here?) 
        animations:^{ 
         myImageView.frame = CGRectOffset(myImageView.frame, 500, 0);  
        } 
        completion:^(BOOL finished){ 
         [myArray removeObject:myImageView]; 
         [myImageView removeFromSuperview]; 
         [myImageView release]; 
        } 
    ]; 
} 

a continuación para detectar la corriente CGPoint del imageView que llamo este método cada 60º de un segundo

-(void)findPoint{ 

    for (UIImageView *projectile in bullets) {   
     label.text = [NSString stringWithFormat:@"%f", projectile.center.x]; 
     label2.text = [NSString stringWithFormat:@"%f", projectile.center.y]; 
    } 
} 

Sin embargo esto sólo me da la punto donde termina la animación, quiero obtener el CGPoint actual de la imagen que está animando en la pantalla. ¿Hay alguna opción que deba aplicar aparte de UIViewAnimationOptionAllowUserInteraction para hacer esto? Si no, ¿cómo obtengo la posición actual de una animación imageView?

Respuesta

44

Puede usar presentationLayer, una propiedad del CALayer que "proporciona una aproximación cercana a la versión de la capa que se está visualizando actualmente". Sólo tiene que utilizar de esta manera:

CGRect projectileFrame = [[projectile.layer presentationLayer] frame]; 
+0

Gracias! esto funciona perfectamente, aparte de un método de advertencia no '-presentationLayer' encontrado. ¿Debo importar un marco? – user975134

+0

lo tengo #import gracias otra vez !! – user975134

+0

lo suficiente como para aceptar la respuesta? :-) Sí, olvidé mencionar que debe vincular QuartzCore.framework y agregar una importación #import , como lo haría cada vez que maneje CALayers. – adamsiton

-1

Mucho más fácil de configurar un MVA para view.frame, como se indica en this answer. Puede inspeccionar el nuevo valor para obtener el nuevo marco como CGRect.

+1

Esto no parece funcionar desafortunadamente He intentado con '[view.layer addObserver: self forKeyPath: @" frame "options: NSKeyValueObservingOptionNew context: NULL];' y '[view addObserver: self forKeyPath: @" layer. Opciones de "frame": NSKeyValueObservingOptionNuevo contexto: NULL]; ' – jrmgx

Cuestiones relacionadas