Доступ к текущей позиции UIView во время анимации
Я пытаюсь найти текущую позицию iPhone ImageView, которая анимируется по экрану.
Я создаю и анимирую imageView так
-(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];
}
];
}
затем, чтобы определить текущую CGPoint для imageView, я вызываю этот метод каждые 60 секунд
-(void)findPoint{
for (UIImageView *projectile in bullets) {
label.text = [NSString stringWithFormat:@"%f", projectile.center.x];
label2.text = [NSString stringWithFormat:@"%f", projectile.center.y];
}
}
Однако это только дает мне точку, где анимация заканчивается, я хочу получить текущую CGPoint изображения, которое анимируется по экрану. Есть ли вариант, который мне нужно применить, кроме UIViewAnimationOptionAllowUserInteraction, чтобы сделать это? Если нет, как я могу получить текущую позицию анимации imageView?
2 ответа
Вы можете использовать presentationLayer - свойство CALayer, которое "обеспечивает близкое приближение к версии слоя, который отображается в данный момент". Просто используйте это так:
CGRect projectileFrame = [[projectile.layer presentationLayer] frame];
Swift 5: получить временное положение и размер (CGRect) во время анимации с помощью:
let currentFrame = projectileFrame.layer.presentation()!.frame
Намного проще настроить KVO для view.frame, как указано в этом ответе. Вы можете проверить новое значение, чтобы получить новый кадр как CGRect.