Accessing the current position of UIView during animation

12,236

Solution 1

You can use the presentationLayer - a property of the CALayer that "provides a close approximation to the version of the layer that is currently being displayed". Just use it like this:

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

Solution 2

Swift 5: Get temporary position and size (CGRect) during the animation with:

let currentFrame = projectileFrame.layer.presentation()!.frame
Share:
12,236
user975134
Author by

user975134

Updated on June 16, 2022

Comments

  • user975134
    user975134 almost 2 years

    I am trying to find the current position of an iPhone ImageView that is animating across the screen.

    I create and animate the imageView like so

    -(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];
                         }
         ];
    }
    

    then to detect the current CGPoint of the imageView I call this method every 60th of a second

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

    However this only gives me the point where the animation ends, I want to get the current CGPoint of the image that is animating across the screen. Is there an option that I need to apply other than UIViewAnimationOptionAllowUserInteraction to do this? If not, how do I get the current position of an animating imageView?