CABasicAnimation переместить кадр влево на 300 пикселей - PullRequest
2 голосов
/ 12 марта 2012

Мне нужна помощь с CABasicAnimation. Я пытаюсь переместить NSView влево на 300 пикселей. Я нашел этот поток SO: Как анимировать кадр слоя с CABasicAnimation?

Оказывается, анимация фрейма невозможна, и один из ответов указывает на ссылку на QA на веб-сайте Apple, но выводит меня на общую страницу: http://developer.apple.com/library/mac/#qa/qa1620/_index.html

Итак, как я могу сделать что-то столь же простое, как перевод моего NSView / CALyer? Спасибо!

Ответы [ 2 ]

4 голосов
/ 13 марта 2012

NSView имеет протокол NSAnimatablePropertyContainer, который позволяет создавать основные анимации для представлений:

Протокол NSAnimatablePropertyContainer определяет способ добавления анимации в существующий класс с минимальным влиянием API ...Отправка сообщений «set», совместимых с кодировкой значений ключей, в прокси вызовет анимацию для автоматически анимированных свойств своего целевого объекта.

Протокол NSAnimatablePropertyContainer можно найти здесь

Недавно я использовал эту технику для изменения источника кадра:

-(void)setOrigin:(NSPoint)aPoint {
    [[self animator] setFrameOrigin:aPoint];
}

Вместо вызова [view setFrameOrigin:], я создал другой метод с именем setOrigin: который затем применяет setFrameOrigin:вызов аниматора представления.

Если вам нужно изменить продолжительность анимации, вы можете сделать это следующим образом (аналогично CATransactions):

-(void)setOrigin:(NSPoint)aPoint {
    [NSAnimationContext beginGrouping];
    [[NSAnimationContext currentContext] setCompletionHandler:^{
        ...Completion Callback Code goes here...
    }];
    [[NSAnimationContext currentContext] setDuration:1.0];
    [[self animator] setFrameOrigin:aPoint];
    [NSAnimationContext endGrouping];
}

Описание NSAnimationContext здесь

0 голосов
/ 12 марта 2012

Вместо этого можно анимировать свойство center. Например:

//assuming view is your NSView
CGPoint newCenter = CGPointMake(view.center.x - 300, view.center.y);
CABasicAnimation *animation = [CABasicAnimation animation];
//setup your animation eg. duration/other options
animation.fromValue = [NSValue valueWithCGPoint:v.center];
animation.toValue = [NSValue valueWithCGPoint:newCenter];
[view.layer addAnimation:animation forKey:@"key"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...