Accessing the current position of UIView during animation
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
user975134
Updated on June 16, 2022Comments
-
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?