Как сделать анимацию слайда при создании пользовательского представления в Cocoa?
Я разрабатываю приложение, при нажатии на кнопку пользовательский вид должен скользить со стороны. На самом деле просто появляется окно, но я хотел бы иметь что-то вроде навигационного контроллера iOS. Как это можно сделать? Это для Mac OS X.
Ответы
Ответ 1
Вы можете использовать переход с Core Animation. Вам нужно включить поддержку слоя для родительского представления, а затем вы можете сделать
[[parentView animator] replaceSubview:oldView with:newView];
По умолчанию это будет пересекать представления, но если вы хотите изменить его на анимацию слайдов, вы добавите соответствующее CATransition в словарь анимации.
- (CATransition *)slideAnimation
{
CATransition *transition = [CATransition animation];
[transition setType:kCATransitionMoveIn];
[transition setSubtype:kCATransitionFromRight];
return transition;
}
а затем установить эту анимацию в родительском представлении
...
[parentView setAnimations:[NSDictionary dictionaryWithObject:[self slideAnimation] forKey:@"subviews"];
...
Ответ 2
Вы можете использовать animator
. Вот пример:
NSPoint startPoint = NSMakePoint(NSWidth([[self window] frame]), NSHeight([[self window] frame]) - NSHeight([view frame]));
[view setFrameOrigin:startPoint];
NSPoint endPoint = NSMakePoint(0.0f, startPoint.y);
[[view animator] setFrameOrigin:endPoint];
Ответ 3
Ответ очень велик!
Если это не сработает, проверьте, что вы вызываете [prentView setWantsLayer: YES] где-то в вашем коде.
Ответ 4
NSView *view = yourview;
view.wantsLayer = YES;
//Установите политику перерисовки слоя. Это лучше было бы сделать в методе инициализации подкласса NSView, а не здесь.
view.layerContentsRedrawPolicy = NSViewLayerContentsRedrawOnSetNeedsDisplay;
Затем
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context)
{
context.duration = 2.f;
view.animator.frame = CGRectOffset(view.frame, 180, 0);
}
completionHandler:^{
view.hidden = YES;
}];