UIimageView在设置变换后丢失帧原点位置

时间:2013-03-12 15:58:36

标签: ios uiview uiimageview

我有一个带有脸部图像的UIImageView,然后我将旋转变换动画应用到该UIImageView。

 self.transform = CGAffineTransformRotate(self.transform, M_PI / 16);

[UIView animateWithDuration:0.5
                  delay:0.0
                options:UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse
             animations:^{

                 self.transform = CGAffineTransformRotate(self.transform, -1 * (M_PI/8));

             }
             completion:^(BOOL completed) {}];

然后我有另一个动画用于在y轴上上下移动的同一个脸部图像。

[UIView animateWithDuration:0.2
                      delay:0.0
                    options:UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse
                 animations:^{

                     self.transform = CGAffineTransformMakeTranslation(0, 10);
                 }
                 completion:^(BOOL completed){}];

执行第一个动画后,我需要更改UIImageView位置,然后开始第二个动画。

我有一个stopAnimation方法,可以删除动画,重置转换,并设置UIImageView的位置。

-(void)stopAnimation:(NSInteger)currentAnimation{

    [self.layer removeAllAnimations];

    [self setTransform:CGAffineTransformIdentity];
    [self setFrame:initFrame];

    CGPoint position = [self getNextPosition:currentAnimation];
    //[self setTransform:CGAffineTransformMakeTranslation(0, 0)];
    CGRect frame = self.frame;
    frame.origin.x = position.x;
    frame.origin.y = position.y;
    self.frame = frame;
}

-(CGPoint)getNextPosition:(NSInteger)currentAnimation{

    CGPoint position = [[positions objectAtIndex:(currentAnimation-1)] CGPointValue];
    NSLog(@"Current animation:%u %f:%f", currentAnimation,position.x,position.y);
    return position;
}

如果我在没有动画的情况下执行位置更改,则UIImageView位于屏幕的正确位置,但如果我使用动画运行,动画效果不错,但UIImageView位置错误。

我尝试了相同的设置UIImageView的中心,但我有同样的问题。

1 个答案:

答案 0 :(得分:0)

尝试按第一个动画的持续时间偏移第二个动画。

[UIView animateWithDuration:0.2
                      delay:0.51 //delay by the duration of the first animation
                    options:UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse
                 animations:^{
                     self.transform = CGAffineTransformConcat(self.transform, CGAffineTransformMakeTranslation(0, 10));
                 }
                 completion:^(BOOL completed){}];

您也可以尝试将第二个动画块放在第一个动画的完成块中。