NSOperation для цикла анимации вызывает странное поведение прокрутки - PullRequest
0 голосов
/ 27 марта 2010

Я создал цикл анимации, который я запускаю как операцию, чтобы остальная часть моего интерфейса реагировала. Хотя почти там, есть еще одна проблема. Кажется, что мои UIScrollViews не надёжно реагируют, когда пользователь нажимает. Это означает, например, что если пользователь перетаскивает вид прокрутки, когда он поднимает пальцы, вид прокрутки не возвращается на место и полоса прокрутки остается видимой. Как будто палец не покинул экран. Требуется еще одно нажатие на вид прокрутки, чтобы привязать его к правильному положению, а полоса прокрутки исчезнуть ...

Вот цикл, который я создал в подклассе NSOperation:

- (void)main
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSRunLoop *runLoop = [NSRunLoop currentRunLoop];

    _displayLink = [[CADisplayLink displayLinkWithTarget: self selector: @selector(animationLoop:)] retain];
    [_displayLink setFrameInterval: 1.0f];
    [_displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode: NSRunLoopCommonModes];

    while (![self isCancelled])
    {
        NSAutoreleasePool *loopPool = [[NSAutoreleasePool alloc] init];
        [runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
        [loopPool drain];
    }

    [_displayLink invalidate];

    [pool release];
}

Кажется, что во время этой операции дела идут немного странно ...

Кто-нибудь знает, что здесь происходит, и еще лучше, как это исправить ...

Спасибо!

1 Ответ

0 голосов
/ 02 апреля 2010

Я не понимаю, почему вы используете такое сложное решение для ваших нужд, которое кажется очень классическим.

По моему мнению, вам лучше использовать базовые функции Quartz для создания анимации и позволить ОС выбирать, когда создавать композиции для рендеринга. Вы также можете использовать методы setNeedsLayout и setNeedDisplay, чтобы уведомить цикл рендеринга о том, что вы что-то изменили, вместо того, чтобы реализовывать свой собственный цикл.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...