切换视图后,UIImageView在屏幕上浮动

时间:2012-11-26 04:25:55

标签: iphone ios animation uiview ios6

我正试图制作指南针。

基本上我使用罗盘针的图像作为指南针的方向。它可以在指南针中心周围设置精细动画UNTIL我切换视图,或添加另一个视图(例如UIActionView或切换到另一个视图控制器):

    - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading{

            float oldRadian = (-manager.heading.trueHeading *M_PI /180.0f);
            float newRadian = (-newHeading.trueHeading *M_PI /180.0f);

            CABasicAnimation *animation;
            animation=[CABasicAnimation animationWithKeyPath:@"transform.rotation"];
            animation.fromValue = [NSNumber numberWithFloat:oldRadian];
            animation.toValue = [NSNumber numberWithFloat:newRadian];
            animation.duration = 0.5f;

            [compassArrow.layer addAnimation:animation forKey:@"animateMyRotation"];
            compassArrow.transform = CGAffineTransformMakeRotation(newRadian);
}

在此之后,我正在切换到另一个视图控制器,它是指示动画的罗盘箭头图像视图。开始漂浮。

任何想法为什么会这样?

5 个答案:

答案 0 :(得分:2)

将指南针箭头中心设置为指南针中心

compassArrow.center = CompassImage.center;

希望这有助于你

答案 1 :(得分:1)

compassArrow imageView设置定位点。这样它就会根据锚点旋转。

使用compassArrow.layer.anchorPoint = CGPointMake(0.5, 0.5);

希望我会帮助你.....

答案 2 :(得分:0)

首先获取图像视图框。为此,您可以在viewDidLoad中键入NSLog(@"%f %f %f %f", compassArrow.frame.origin.x,compassArrow.frame.origin.y,compassArrow.frame.size.width,compassArrow.frame.size.height);。 记下框架。然后在viewWillAppear方法中添加该行。

-(void)viewWillAppear:(BOOL)animated{

   [super viewWillAppear:YES];
   [compassArrow setFrame:CGRectMake(CMPASSARROWFRAME.x, CMPASSARROWFRAME.y, CMPASSARROWFRAME.width, CMPASSARROWFRAME.height)];
}

请注意,“CMPASSARROWFRAME”是compassArrow框架的框架。

答案 3 :(得分:0)

请检查开关前后的帧,看看它们是否相同。如果它们不相同那么就意味着你在某处错误地设置了它的帧。如果在切换视图之前和之后帧相同那么问题使用图层转换。您可能已经在某处或其他地方更改了锚点或图层位置。

找出更新的位置,使用断点,按照控制流程跟踪帧更新的位置。您可以在xcode中找到调试控制台上方的步骤。

答案 4 :(得分:0)

我在更改视图之前使用removeFromSuperlayer方法解决了它。问题是我为同一个键创建了多个动画(@“animateMyRotation”)。

[compassArrow.layer removeFromSuperlayer];