3

为此,我在水平位置为 UIImageview 设置动画我使用了以下代码我使用了 NSTimer

timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];

-(void)onTimer
{
    [UIView animateWithDuration:10.0f animations:^{
          //Moving_Cloud is an image view
            Moving_Cloud.frame = CGRectMake(200.0f, 150.0f, Moving_Cloud.frame.size.width, Moving_Cloud.frame.size.height);
           }];

}

现在我面临的问题是我需要在动画持续时间后获取“Moving_Cloud”的坐标
请帮助我
提前谢谢。

4

2 回答 2

1

Abhijit Chaudhari 从我上一篇文章的评论中了解到,您想要的不是“动画持续时间之后”的位置,而是动画期间的位置

如果我仍然没有做对,请澄清你的问题。(或者给我买一个新的大脑)

-(void) animateMe(){
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(onTimer:) userInfo:nil repeats:YES];
    [UIView animateWithDuration:10.0f animations:^{
         //Moving_Cloud is an image view
         Moving_Cloud.frame = CGRectMake(200.0f, 150.0f, Moving_Cloud.frame.size.width, Moving_Cloud.frame.size.height);
    }];
}

-(void)onTimer:(id)sender{
    NSLog(@"Currently in x=%f", [[ddddd.layer presentationLayer] frame].origin.x);
    NSLog(@"Currently in y=%f", [[ddddd.layer presentationLayer] frame].origin.y);
}
于 2013-07-18T04:57:26.667 回答
1
[UIView animateWithDuration:10.0f animations:^{
    Moving_Cloud.frame = CGRectMake(200.0f, 150.0f, Moving_Cloud.frame.size.width, Moving_Cloud.frame.size.height);
} completion:^(BOOL finished){
    CGPoint newPost = Moving_Cloud.frame.origin;
    CGFloat xPos = newPost.x;
    CGFloat yPos = newPost.y;
    // do stuff ?
}];

在动画结束时,“完成:”块将被触发。
通常你的图像应该是 x = 200, y = 150。

请注意,这些坐标是相对于它的超级视图(包装 Moving_Cloud 视图的视图)。

注意:
按照惯例,我建议将“Moving_Cloud”更改为“movingCloud”。
实例类在 Objective-C 中以较低的上限开始。
也不要使用 _ 而是使用大写字母。

于 2013-07-18T04:08:50.457 回答