0

我正在尝试制作指南针。

基本上,我使用指南针的图像作为指南针的方向。在我切换视图或添加另一个视图(例如 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);
}

在此之后,我将切换到另一个视图控制器,即 compassArrow 图像视图,它正在动画并开始浮动。

任何想法为什么会发生这种情况?

4

5 回答 5

2

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

compassArrow.center = CompassImage.center;

希望这对你有帮助

于 2012-11-26T05:13:12.120 回答
1

compassArrowimageView 设置锚点。这样它就会根据锚点旋转。

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

希望我能帮助你......

于 2012-11-26T04:48:39.790 回答
0

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

-(void)viewWillAppear:(BOOL)animated{

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

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

于 2012-11-26T07:19:00.633 回答
0

请检查切换前后的框架,看看它们是否相同。如果它们不一样,则意味着您在某处设置了错误的框架。如果切换视图前后的框架相同,则问题出在图层转换。您可能已经更改了锚点或图层位置。

找出更新的位置,使用断点,遵循控制流并跟踪框架更新的位置。您可以在 xcode 中的调试控制台上方找到进入按钮。

于 2012-11-26T09:36:23.667 回答
0

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

[compassArrow.layer removeFromSuperlayer];
于 2012-11-27T07:18:41.097 回答