在iPhone上渲染手表框架而不停顿的最佳方法

时间:2015-04-13 05:09:22

标签: ios objective-c watchkit

interface

我正在尝试通过渲染UIImage'帧'来扩展Apple Watch可以执行的操作,然后每隔500毫秒(每秒2帧)将其设置在WKInterfaceImage上。

我的计划是尝试渲染不需要高细节或帧率的8位风格游戏,然后在手表应用程序上获取箭头按钮来指导游戏状态的变化。

所以我有一个Game类,它有一个'tick'方法,返回UIImage。每次调用'tick'都将以单点进行游戏。想想俄罗斯方块,游戏的每个“滴答”都会将下降的块向下移动一个块空间。游戏按“滴答”进行,直到有来自用户的交互。在调用旋转块时,我告诉Game类在下一个'tick'发生时向左或向右旋转。以下是我WKInterfaceController课程的相关部分。

- (void)willActivate
{
    // This method is called when watch view controller is about to be visible to user
    NSLog(@"%@ will activate", self);

    // wait 2 seconds until game 'starts'
    [self performSelector:@selector(timerFired) withObject:nil afterDelay:2.];
}

- (void)timerFired
{
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.theImage setImage:[self.game tick]];

        [self performSelector:@selector(timerFired) withObject:nil afterDelay:.5];
    });
}

- (IBAction)leftButtonPressed
{
    self.game.futureMove = FutureMoveAntiClockWise;
}
- (IBAction)rightButtonPressed
{
    self.game.futureMove = FutureMoveClockWise;
}

现在,令人惊讶的是,所有代码都运行良好 - 只需几秒钟。然后它变得越来越慢,越来越多(在帧数方面)。大约10秒后,按下旋转的左或右按钮仅在几秒钟后显示在渲染的UIImage上。

手表应用程序开始渲染每秒30帧(如果我想要它),然后爬行越来越慢,最终停止。有没有更好的方法可以setImageWKInterfaceImage上反复可靠而不会放慢速度?

我太近了!!

1 个答案:

答案 0 :(得分:0)

感谢您的评论。更新到Xcode 6.3后它工作正常并且没有滞后但我会留意@MikeSwanson并期望Apple拒绝我的应用程序:(。