动画与CGPoint in for循环

时间:2012-12-11 22:53:12

标签: objective-c xcode animation cgpoint

我正在尝试制作一个动画,当一个人在屏幕上从A点到B点时,对象应该从A点慢慢地(水平地)滑动到B点。 顺便说一句,我是动画的新手。

        [UIView animateWithDuration:10
                              delay:0
                            options:nil
                         animations:^ {

                             if(magnifier != nil){
                                 [magnifier removeFromSuperview];

                             }

                             magnifier = [[MagnifierView alloc] init];

                             magnifier.viewToMagnify = imageView;
                             magnifier.touchPoint = newPoint;
                             [imageView addSubview:magnifier];
                             [magnifier setNeedsDisplay];                             
                         } 
                         completion:nil]; 

但由于某种原因,它正在向上移动,然后最终到达B点。在一个奇怪的曲线中。

我该如何正确地做到这一点?

1 个答案:

答案 0 :(得分:1)

不要使用循环。只需使用你拥有的动画块。

  • 在阻止之前,将对象设置为A点。
  • 在块中,将其设置为B点。块将使其生成动画。
  • 此外,在动画块之外初始化您的对象。

示例:

// initialize your object outside the block
magnifier = [[MagnifierView alloc] init];
[magnifier setFrame:CGRectMake(0, 0, 100, 100)]; // for example, start at 0, 0 (width and height set to 100 for demo purposes)
[imageView addSubview:magnifier];

[UIView animateWithDuration:10
 delay:0
 options:nil 
 animations:^ {

    // inside the animation block, put the location you want the magnifier to move to
    [magnifier setFrame:CGRectMake(500, 0, 100, 100)]; // for example, move to 500, 0

} 
completion:^(BOOL finished) {

    // do anything you need after here

}];

另外,对于选项,您可以设置UIViewAnimationOptionCurveEaseInOut如果您希望在动画的开头和结尾有缓动效果,或UIViewAnimationOptionCurveLinear如果您想要一个没有缓和的同样定时动画(还有其他可用,查找UIViewAnimationOptions)。