【问题标题】:CADisplayLink in RunLoop not calling callbackRunLoop 中的 CADisplayLink 未调用回调
【发布时间】:2011-12-30 15:54:57
【问题描述】:

我有以下代码应该让 drawFrame 在每一帧都被调用,但它没有:

- (void)viewDidLoad
{
    [super viewDidLoad];
    displayLink = [viewReference.window.screen displayLinkWithTarget:(self) selector:@selector(drawFrame)];
    [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}


- (void) drawFrame:(CADisplayLink*)sender
{
    thel.text = @"test";
}

dispayLink 是指向 CADisplayLink 的指针。在我看来,它们连接到一个标签。此视图连接到 viewReference。 self 是 ViewController。声明了drawFrame

- (void) drawFrame:(CADisplayLink*)sender;

在viewDidLoad中测试时可以设置thel.text。

似乎 drawFrame 从未被调用过。该应用程序基于带有自定义故事板文件的 Xcode 4.2 空应用程序模板(我后来添加了它,而不是选择在创建时使用故事板)。除了视图控制器、视图和标签之外,它是空的。

我是新手。当调用 [[NSRunLoop currentRunLoop] run] iOS 5.0 Simulator 根本不显示应用程序。 currentRunLoop 无论如何都应该是默认的主 runLoop。

【问题讨论】:

    标签: ios5 nsrunloop cadisplaylink


    【解决方案1】:

    也许你需要设置 CADisplaylink 'frameInterval' 属性:

    displayLink.frameInterval = someRate (1-60);
    

    另一个有趣的好奇心是

    weak private var _anim : CADisplayLink? // mysteriously does nothing
    

    显示链接,原因不明,如果变量很弱,根本不运行。

    private var _anim : CADisplayLink? // rock on
    

    【讨论】:

    • 不幸的是,这没有做到。
    • 这很奇怪。哦 - 我刚刚注意到你的代码中有viewReference.window.screen。不知道那是关于什么的。我就是这样做的。(对不起@格式化。祝你好运!)displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(barEvent)]; displayLink.frameInterval = 5; [displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
    • 这行得通!非常感谢你! screen 是情节提要视图的属性。我阅读的每条文字都将信息发送到屏幕上。
    • grabster,我刚刚意识到在间隔时我编辑了您的答案以添加更多信息。我对此感到难过:O @NoGrabbing
    猜你喜欢
    • 1970-01-01
    • 2018-05-01
    • 2021-03-26
    • 2021-03-30
    • 2018-01-09
    • 2014-05-30
    • 2014-12-31
    相关资源
    最近更新 更多