我正在制作一个简单的指南针,它工作得很好,但动画可能会更流畅。有时它可能有点跳动,类似于帧速率低于标准的游戏。有没有办法让它动画更流畅?
这是我的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
CLLocationManager* lm = [[CLLocationManager alloc] init];
self.locman = lm;
self.locman.delegate = self;
self.locman.headingFilter = 2;
[self.locman startUpdatingHeading];
}
- (void) locationManager:(CLLocationManager *)manager
didUpdateHeading:(CLHeading *)newHeading {
CGFloat h = newHeading.magneticHeading;
NSString* dir = @"N";
NSArray* cards = [NSArray arrayWithObjects:
@"N", @"NE", @"E", @"SE", @"S", @"SW", @"W", @"NW", nil];
for (int i = 0; i < 8; i++)
if (h < 45.0/2.0 + 45*i) {
dir = [cards objectAtIndex: i]; break;
}
needle.transform = CGAffineTransformMakeRotation(radianConst*-h);
direction = dir;
}
最佳答案
您的问题令人困惑,因为您提到了帧速率较差的游戏,这让我想知道您遇到了三个问题中的哪一个:
或
或
我猜你的问题实际上是 第二我列出的一个,并且您正在从核心位置获取航向更新,这些更新从一个位置“跳跃”到另一个位置。
我会采取两种方法来解决这个问题——一种在另一种之前(因为一种更容易,另一种更难)。
首先,我会尝试稍微增加过渡持续时间,或者至少手动设置它,这样你就知道它是什么......也许是 2 秒?
[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:2.0f]
forKey:kCATransactionAnimationDuration];
needle.transform = CGAffineTransformMakeRotation(radianConst*-h);
[CATransaction commit];
如果做不到这一点,您将不得不采取一些措施并应用某种平滑算法......但是,我相信我听到一位苹果开发人员提到他们已经在他们的一个核心位置视频中做到了这一点。
关于objective-c - CLLocationManager 航向更新的平滑显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7917077/