CADisplayLink в RunLoop не вызывает обратный вызов

У меня есть следующий код, который должен вызывать 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. thel связан с лейблом на мой взгляд. Это представление связано с viewReference. self - это ViewController. DrawFrame объявлен

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

thel.text может быть установлен, когда я проверяю его в viewDidLoad.

Кажется, drawFrame никогда не вызывается. Приложение основано на пустом шаблоне приложения Xcode 4.2s с пользовательским файлом раскадровки (я добавил его позже, вместо того, чтобы выбрать использование раскадровки при создании). Он пуст, кроме контроллера вида, вида и метки.

Я новичок в этом. При вызове [[NSRunLoop currentRunLoop] run] iOS 5.0 Simulator вообще не отображает приложение. В любом случае currentRunLoop должен быть основным runLoop по умолчанию.

1 ответ

Решение

Возможно, вам нужно установить свойство CADisplaylink 'frameInterval':

displayLink.frameInterval = someRate (1-60);

Еще одно интересное любопытство заключается в том, что

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

ссылки по неизвестным причинам просто не запускаются, если переменная слаба.

private var _anim : CADisplayLink? // rock on
Другие вопросы по тегам