我正在制作一个简单的指南针,它工作得很好,但动画可以更顺畅。有时它可能有点跳跃,类似于具有低于帧速率的游戏。有没有办法让它更加流畅?
这是我的代码:
- (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;
}
答案 0 :(得分:3)
你的问题很混乱,因为你提到的帧速率很差的游戏,这让我想知道你遇到的三个问题中的哪一个:
或强> 的
或强> 的
我猜你的问题实际上是我列出的第二个,并且你正在从核心位置获取标题更新,这些位置从一个位置“跳转”到另一个位置。
我有两种方法可以解决这个问题 - 一个接一个(因为一个更容易,另一个更难)。
首先,我会尝试稍微增加转换持续时间,或者至少手动设置它,以便你知道它是什么......可能是2秒?
[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:2.0f]
forKey:kCATransactionAnimationDuration];
needle.transform = CGAffineTransformMakeRotation(radianConst*-h);
[CATransaction commit];
如果做不到这一点,你将不得不采用某种平滑算法......但是,我相信我听到苹果开发者提到他们已经在他们的核心位置视频中做过这个。