objective-c - CLLocationManager 航向更新的平滑显示

标签 objective-c ios core-location

我正在制作一个简单的指南针,它工作得很好,但动画可能会更流畅。有时它可能有点跳动,类似于帧速率低于标准的游戏。有没有办法让它动画更流畅?

这是我的代码:

- (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;
}

最佳答案

您的问题令人困惑,因为您提到了帧速率较差的游戏,这让我想知道您遇到了三个问题中的哪一个:

  • 您收到了很多 didUpdateHeading: 消息,表明您实际上遇到了性能问题 (在这种情况下,最后一个值的缓存和计算以确定您是否确实需要更新 View 可能是有序的)


  • CoreLocation 实际上正在向您发送“跳跃”的数据,使您的显示看起来跳跃


  • 您尚未正确设置要在变换属性上具有的隐式动画的隐式动画参数

  • 我猜你的问题实际上是 第二我列出的一个,并且您正在从核心位置获取航向更新,这些更新从一个位置“跳跃”到另一个位置。

    我会采取两种方法来解决这个问题——一种在另一种之前(因为一种更容易,另一种更难)。

    首先,我会尝试稍微增加过渡持续时间,或者至少手动设置它,这样你就知道它是什么......也许是 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/

    相关文章:

    ios - iOS 上的标准位置服务耗电

    ios - 使用硬编码用户名和密码 ios 将视频上传到 youtube

    ios - 在 UITableView 部分添加小节

    ios - 选中时 TabView 崩溃

    ios - 即使设置了更高的 gps 精度 (kCLLocationAccuracyThreeKilometers),位置也会更新

    ios - CLLocationManager requestWhenInUseAuthorization() 不工作

    objective-c - 即使静音按钮打开,如何播放音频?

    objective-c - 隐藏/显示 NSToolbarItem

    ios - Swift 的 NSURLRequest 问题

    ios - 本地通知在 iOS 10.3.1 中不起作用