我正试图制作指南针。
基本上我使用罗盘针的图像作为指南针的方向。它可以在指南针中心周围设置精细动画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);
}
在此之后,我正在切换到另一个视图控制器,它是指示动画的罗盘箭头图像视图。开始漂浮。
任何想法为什么会这样?
答案 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];